X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=ctdlsh%2Fconfig.c;h=02f1b5b3e37161848ae901fa859d505478f8643c;hb=HEAD;hp=9370047cf9b38799b7a565548c311e8b1f7b5e0a;hpb=2a600892fe1808cebed70efa2d6248ca64e067a9;p=citadel.git diff --git a/ctdlsh/config.c b/ctdlsh/config.c index 9370047cf..02f1b5b3e 100644 --- a/ctdlsh/config.c +++ b/ctdlsh/config.c @@ -8,17 +8,18 @@ #include "ctdlsh.h" -int show_full_config(int server_socket) { +int show_full_config(int server_socket) +{ char buf[1024]; - sock_puts(server_socket, "CONF listval"); - sock_getln(server_socket, buf, sizeof buf); + sock_puts(server_socket, "CONF listval"); + sock_getln(server_socket, buf, sizeof buf); if (buf[0] != '1') { - printf("%s\n", &buf[4]); - return(cmdret_error); + printf("%s\n", &buf[4]); + return (cmdret_error); } - while (sock_getln(server_socket, buf, sizeof buf), strcmp(buf, "000")) { + while (sock_getln(server_socket, buf, sizeof buf), strcmp(buf, "000")) { char *val = NULL; char *p = strchr(buf, '|'); if (p != NULL) { @@ -27,27 +28,84 @@ int show_full_config(int server_socket) { *p = 0; } printf("%-30s = %s\n", buf, val); - } - return(cmdret_ok); + return (cmdret_ok); } -int cmd_config(int server_socket, char *cmdbuf) { +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); + if (k[0] == '?') { + printf("config Print values of all configuration keys\n"); + printf("config ? Display this message\n"); + printf("config [key] Print value of configuration key 'key'\n"); + printf("config [key] [value] Set configuration key 'key' to 'value'\n"); + return (cmdret_ok); + } + + 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); }