Skip to content
This repository was archived by the owner on Jan 6, 2023. It is now read-only.

Commit 91c27b1

Browse files
Tan, Yew Waynephmccarty
authored andcommitted
Configure URLs at runtime from environment variable
1 parent e6cbc69 commit 91c27b1

2 files changed

Lines changed: 50 additions & 3 deletions

File tree

clr_debug_daemon.service

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ DefaultDependencies=no
55
[Service]
66
Type=simple
77
ExecStart=/usr/bin/clr_debug_daemon
8+
# Uncomment to use custom URLs, space separated
9+
#Environment="CLR_DEBUGINFO_URLS=https://cdn-alt.download.clearlinux.org/debuginfo/ https://cdn.download.clearlinux.org/debuginfo/"
810

911
[Install]
1012
WantedBy=multi-user.target

src/server.c

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,11 @@
6262

6363
static pthread_mutex_t dupes_mutex = PTHREAD_MUTEX_INITIALIZER;
6464

65-
char *urls[2] = { "https://cdn.download.clearlinux.org/debuginfo/",
66-
"https://cdn-alt.download.clearlinux.org/debuginfo/" };
65+
char *urls_default[] = { "https://cdn.download.clearlinux.org/debuginfo/",
66+
"https://cdn-alt.download.clearlinux.org/debuginfo/" };
67+
int urls_size = 2;
6768
int urlcounter = 1;
69+
char **urls = urls_default;
6870

6971
static NcHashmap *hash = NULL;
7072

@@ -97,6 +99,40 @@ static int avoid_dupes(const char *url)
9799
return retval;
98100
}
99101

102+
/*
103+
* Read URLs from environment variable, space separated
104+
*/
105+
int configure_urls(void)
106+
{
107+
const char *env_var = getenv("CLR_DEBUGINFO_URLS");
108+
const char *token = env_var;
109+
int count = 0;
110+
char **urls_new = NULL;
111+
if (env_var) while (1) {
112+
int token_len = strcspn(token, " \t\n");
113+
if (token_len) {
114+
count++;
115+
urls_new = realloc(urls_new, count * sizeof(char*));
116+
if (!urls_new) { perror("realloc()"); exit(EXIT_FAILURE); }
117+
118+
char *url = calloc(token_len+1, sizeof(char));
119+
if (!url) { perror("calloc()"); exit(EXIT_FAILURE); }
120+
121+
urls_new[count-1] = strncpy(url, token, token_len);
122+
token += token_len;
123+
}
124+
if (*token == '\0') break;
125+
token++;
126+
}
127+
if (count) {
128+
// Abandon defaults
129+
urls = urls_new;
130+
urls_size = count;
131+
urlcounter = 0;
132+
}
133+
return count;
134+
}
135+
100136
#ifdef HAVE_ATOMIC_SUPPORT
101137

102138
static atomic_int current_connection_count = 0;
@@ -365,7 +401,7 @@ static void *server_thread(void *arg)
365401
goto thread_end;
366402
}
367403
url = NULL;
368-
if (asprintf(&url, "%s%s%s.tar", urls[urlcounter % 2], prefix, path) < 0) {
404+
if (asprintf(&url, "%s%s%s.tar", urls[urlcounter % urls_size], prefix, path) < 0) {
369405
goto thread_end;
370406
}
371407

@@ -416,6 +452,15 @@ int main(__nc_unused__ int argc, __nc_unused__ char **argv)
416452
struct passwd *passwdentry;
417453
const char *required_paths[] = { "/var/cache/debuginfo/lib", "/var/cache/debuginfo/src" };
418454

455+
if (configure_urls()) {
456+
fprintf(stderr, "Using urls from environment\n");
457+
} else {
458+
fprintf(stderr, "Using compiled default urls\n");
459+
}
460+
for (int i=0; i<urls_size; i++) {
461+
fprintf(stderr, "url: %s\n", urls[i]);
462+
}
463+
419464
umask(0);
420465
passwdentry = getpwnam("dbginfo");
421466
if (passwdentry) {

0 commit comments

Comments
 (0)