Second problem;
[handlervirt.git] / handler_virt_domains.c
blob5e71029332d597e9a299499d90864d934957d37d
1 #include <sys/types.h>
2 #include <dirent.h>
3 #include <errno.h>
4 #include <stdio.h>
5 #include <string.h>
6 #include <sys/stat.h>
7 #include <unistd.h>
8 #include <cherokee/cherokee.h>
11 get_all_configurations(cherokee_avl_r_t *avl_r, cherokee_buffer_t *user, cherokee_buffer_t *buffer) {
12 int return_code;
13 DIR *dir;
14 struct dirent entry;
15 struct dirent *result;
16 char file[1024];
18 snprintf(file, 1023, "/mnt/netapp/users/%s", user->buf);
20 if ((dir = opendir(file)) == NULL)
21 perror("opendir() error");
22 else {
23 unsigned int offset = strlen(file);
24 file[offset] = '/';
25 offset++;
26 for (return_code = readdir_r(dir, &entry, &result);
27 result != NULL && return_code == 0;
28 return_code = readdir_r(dir, &entry, &result)) {
29 struct stat statbuf;
30 snprintf(&file[offset], 1023 - offset, "%s/index.xml", entry.d_name);
32 if (stat(file, &statbuf) == 0) {
33 cherokee_buffer_t domain = CHEROKEE_BUF_INIT;
34 cherokee_buffer_t *host;
35 cherokee_buffer_add_va (&domain, "%s_%s", user->buf, entry.d_name);
37 ret_t status = cherokee_avl_r_get (avl_r, &domain, (void **) &host);
39 cherokee_buffer_add_str (buffer, " <domain");
41 if (status == ret_ok) {
42 cherokee_buffer_add_str (buffer, " status=\"running\"");
45 cherokee_buffer_add_str (buffer, "><name>");
46 cherokee_buffer_add_buffer(buffer, &domain);
47 cherokee_buffer_add_str (buffer, "</name></domain>\n");
49 cherokee_buffer_mrproper(&domain);
50 } else {
51 strcpy(&file[offset], "index.xml.deleted");
52 if (stat(file, &statbuf) == 0)
53 cherokee_buffer_add_va (buffer, " <domain status=\"deleted\"><name>%s_%s</name></domain>\n", user->buf, entry.d_name);
56 if (return_code != 0)
57 perror("readdir_r() error");
58 closedir(dir);