Code

Added sysdb(1) manpage and updated sysdb help output.
[sysdb.git] / src / tools / sysdb / main.c
index 0639e5f74829042a4e3a8532b97f6ee74d853236..b20e0ca4d65e3f0de245e358459402de54c77bb0 100644 (file)
@@ -29,6 +29,8 @@
 #      include "config.h"
 #endif /* HAVE_CONFIG_H */
 
+#include "tools/sysdb/input.h"
+
 #include "client/sysdb.h"
 #include "client/sock.h"
 #include "utils/error.h"
 #      define DEFAULT_SOCKET "unix:"LOCALSTATEDIR"/run/sysdbd.sock"
 #endif
 
-static void
-exit_usage(char *name, int status)
-{
-       printf(
-"Usage: %s <options>\n"
-
-"\nOptions:\n"
-"  -h        display this help and exit\n"
-"  -V        display the version number and copyright\n"
-
-"\nSysDB client "SDB_CLIENT_VERSION_STRING SDB_CLIENT_VERSION_EXTRA", "
-PACKAGE_URL"\n", basename(name));
-       exit(status);
-} /* exit_usage */
-
-static void
-exit_version(void)
-{
-       printf("SysDB version "SDB_CLIENT_VERSION_STRING
-                       SDB_CLIENT_VERSION_EXTRA", built "BUILD_DATE"\n"
-                       "using libsysdbclient version %s%s\n"
-                       "Copyright (C) 2012-2013 "PACKAGE_MAINTAINER"\n"
-
-                       "\nThis is free software under the terms of the BSD license, see "
-                       "the source for\ncopying conditions. There is NO WARRANTY; not "
-                       "even for MERCHANTABILITY or\nFITNESS FOR A PARTICULAR "
-                       "PURPOSE.\n", sdb_client_version_string(),
-                       sdb_client_version_extra());
-       exit(0);
-} /* exit_version */
-
 static const char *
 get_current_user(void)
 {
@@ -160,18 +131,52 @@ get_homedir(const char *username)
        return result->pw_dir;
 } /* get_homedir */
 
+static void
+exit_usage(char *name, int status)
+{
+       printf(
+"Usage: %s <options>\n"
+
+"\nOptions:\n"
+"  -H HOST   the host to connect to\n"
+"            default: "DEFAULT_SOCKET"\n"
+"  -U USER   the username to connect as\n"
+"            default: %s\n"
+"\n"
+"  -h        display this help and exit\n"
+"  -V        display the version number and copyright\n"
+
+"\nSysDB client "SDB_CLIENT_VERSION_STRING SDB_CLIENT_VERSION_EXTRA", "
+PACKAGE_URL"\n", basename(name), get_current_user());
+       exit(status);
+} /* exit_usage */
+
+static void
+exit_version(void)
+{
+       printf("SysDB version "SDB_CLIENT_VERSION_STRING
+                       SDB_CLIENT_VERSION_EXTRA", built "BUILD_DATE"\n"
+                       "using libsysdbclient version %s%s\n"
+                       "Copyright (C) 2012-2014 "PACKAGE_MAINTAINER"\n"
+
+                       "\nThis is free software under the terms of the BSD license, see "
+                       "the source for\ncopying conditions. There is NO WARRANTY; not "
+                       "even for MERCHANTABILITY or\nFITNESS FOR A PARTICULAR "
+                       "PURPOSE.\n", sdb_client_version_string(),
+                       sdb_client_version_extra());
+       exit(0);
+} /* exit_version */
+
 int
 main(int argc, char **argv)
 {
-       sdb_client_t *client;
-
        const char *host = NULL;
        const char *user = NULL;
 
        const char *homedir;
        char hist_file[1024] = "";
 
-       sdb_strbuf_t *buf;
+       sdb_input_t input = SDB_INPUT_INIT;
 
        while (42) {
                int opt = getopt(argc, argv, "H:U:hV");
@@ -209,14 +214,14 @@ main(int argc, char **argv)
                        exit(1);
        }
 
-       client = sdb_client_create(host);
-       if (! client) {
+       input.client = sdb_client_create(host);
+       if (! input.client) {
                sdb_log(SDB_LOG_ERR, "Failed to create client object");
                exit(1);
        }
-       if (sdb_client_connect(client, user)) {
+       if (sdb_client_connect(input.client, user)) {
                sdb_log(SDB_LOG_ERR, "Failed to connect to SysDBd");
-               sdb_client_destroy(client);
+               sdb_client_destroy(input.client);
                exit(1);
        }
 
@@ -238,31 +243,9 @@ main(int argc, char **argv)
                }
        }
 
-       buf = sdb_strbuf_create(1024);
-
-       while (42) {
-               const char *prompt = "sysdb=> ";
-               const char *query;
-               char *input;
-
-               if (sdb_strbuf_len(buf))
-                       prompt = "sysdb-> ";
-
-               input = readline(prompt);
-
-               if (! input)
-                       break;
-
-               sdb_strbuf_append(buf, input);
-               free(input);
-
-               query = sdb_strbuf_string(buf);
-               if (! strchr(query, (int)';'))
-                       continue;
-
-               /* XXX */
-               sdb_strbuf_clear(buf);
-       }
+       input.input = sdb_strbuf_create(2048);
+       sdb_input_init(&input);
+       sdb_input_mainloop();
 
        if (hist_file[0] != '\0') {
                errno = 0;
@@ -273,7 +256,8 @@ main(int argc, char **argv)
                }
        }
 
-       sdb_client_destroy(client);
+       sdb_client_destroy(input.client);
+       sdb_strbuf_destroy(input.input);
        return 0;
 } /* main */