ctdlsh can now get and set server configuration varia bles
authorArt Cancro <ajc@citadel.org>
Wed, 17 Aug 2016 17:41:18 +0000 (13:41 -0400)
committerArt Cancro <ajc@citadel.org>
Wed, 17 Aug 2016 17:41:18 +0000 (13:41 -0400)
ctdlsh/config.c

index 9370047..47c5d9a 100644 (file)
@@ -27,27 +27,71 @@ int show_full_config(int server_socket) {
                        *p = 0;
                }
                printf("%-30s = %s\n", buf, val);
-               
        }
 
        return(cmdret_ok);
 }
 
 
+int show_single_config(int server_socket, char *keyname) {
+       char buf[1024];
+
+       sock_printf(server_socket, "CONF getval|%s\n", keyname);
+        sock_getln(server_socket, buf, sizeof buf);
+       if (buf[0] == '2') {
+               char *v = &buf[4];
+               char *t = NULL;
+               while(t = strrchr(v, '|'), t!=NULL) t[0]=0;
+               printf("%-30s = %s\n", keyname, v);
+               return(cmdret_ok);
+       }
+       else {
+               printf("\n");
+               return(cmdret_error);
+       }
+}
+
+
+int set_single_config(int server_socket, char *keyname, char *val) {
+       char buf[1024];
+
+       sock_printf(server_socket, "CONF putval|%s|%s\n", keyname, val);
+        sock_getln(server_socket, buf, sizeof buf);
+       if (buf[0] != '2') {
+               printf("%s\n", buf);
+               return(cmdret_error);
+       }
+       return(show_single_config(server_socket, keyname));
+}
+
+
 int cmd_config(int server_socket, char *cmdbuf) {
 
        char buf[4096];
        strncpy(buf, cmdbuf, sizeof buf);
-       char *p = strchr(buf, ' ');
-       if (p == NULL) {
+       char *k = strchr(buf, ' ');
+       if (k == NULL) {
                return show_full_config(server_socket);
        }
 
-       while (p[0]==' ') ++p;
+       while (k[0]==' ') ++k;
 
-       if (strlen(p) == 0) {
+       if (strlen(k) == 0) {
                return show_full_config(server_socket);
        }
 
-        return(cmdret_error);
+       char *v = strchr(k, ' ');
+       if (v == NULL) {
+               return show_single_config(server_socket, k);
+       }
+
+       v[0] = 0;
+       ++v;
+       while (v[0]==' ') ++v;
+
+       if (strlen(v) == 0) {
+               return show_single_config(server_socket, k);
+       }
+
+       return set_single_config(server_socket, k, v);
 }