X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Ftools%2Fsysdb%2Fmain.c;h=b3a73c698e1e2507f9741b60a6692cb11ed5dd6c;hb=a9ae0d1a4c9e2992d932489c96cd63b2ce2a0c56;hp=331cfa25e640912ac79ac6b37c44d3a91f374323;hpb=ee8df3b190c2eb49e460dcf03f81288a5d825c39;p=sysdb.git diff --git a/src/tools/sysdb/main.c b/src/tools/sysdb/main.c index 331cfa2..b3a73c6 100644 --- a/src/tools/sysdb/main.c +++ b/src/tools/sysdb/main.c @@ -37,6 +37,7 @@ #include "utils/error.h" #include "utils/llist.h" #include "utils/strbuf.h" +#include "utils/os.h" #include @@ -80,34 +81,6 @@ # define DEFAULT_SOCKET "unix:"LOCALSTATEDIR"/run/sysdbd.sock" #endif -static const char * -get_current_user(void) -{ - struct passwd pw_entry; - struct passwd *result = NULL; - - uid_t uid; - - /* needs to be static because we return a pointer into this buffer - * to the caller */ - static char buf[1024]; - - int status; - - uid = geteuid(); - - memset(&pw_entry, 0, sizeof(pw_entry)); - status = getpwuid_r(uid, &pw_entry, buf, sizeof(buf), &result); - - if (status || (! result)) { - char errbuf[1024]; - sdb_log(SDB_LOG_ERR, "Failed to determine current username: %s", - sdb_strerror(errno, errbuf, sizeof(errbuf))); - return NULL; - } - return result->pw_name; -} /* get_current_user */ - static const char * get_homedir(const char *username) { @@ -136,6 +109,7 @@ get_homedir(const char *username) static void exit_usage(char *name, int status) { + char *user = sdb_get_current_user(); printf( "Usage: %s \n" @@ -150,7 +124,8 @@ exit_usage(char *name, int status) " -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()); +PACKAGE_URL"\n", basename(name), user); + free(user); exit(status); } /* exit_usage */ @@ -185,7 +160,7 @@ execute_commands(sdb_client_t *client, sdb_llist_t *commands) while (sdb_llist_iter_has_next(iter)) { sdb_object_t *obj = sdb_llist_iter_get_next(iter); - if (sdb_client_send(client, CONNECTION_QUERY, + if (sdb_client_send(client, SDB_CONNECTION_QUERY, (uint32_t)strlen(obj->name), obj->name) <= 0) { sdb_log(SDB_LOG_ERR, "Failed to send command '%s' to server", obj->name); @@ -203,9 +178,10 @@ execute_commands(sdb_client_t *client, sdb_llist_t *commands) break; } - if ((status == CONNECTION_DATA) || (status == CONNECTION_ERROR)) + if ((status == SDB_CONNECTION_DATA) + || (status == SDB_CONNECTION_ERROR)) break; - if (status == CONNECTION_OK) { + if (status == SDB_CONNECTION_OK) { /* pre 0.4 versions used OK instead of DATA */ sdb_log(SDB_LOG_WARNING, "Received unexpected OK status from " "server in response to a QUERY (expected DATA); " @@ -214,7 +190,7 @@ execute_commands(sdb_client_t *client, sdb_llist_t *commands) } } - if ((status != CONNECTION_OK) && (status != CONNECTION_DATA)) + if ((status != SDB_CONNECTION_OK) && (status != SDB_CONNECTION_DATA)) break; /* error */ } @@ -226,7 +202,7 @@ int main(int argc, char **argv) { const char *host = NULL; - const char *user = NULL; + char *user = NULL; const char *homedir; char hist_file[1024] = ""; @@ -288,20 +264,23 @@ main(int argc, char **argv) if (! host) host = DEFAULT_SOCKET; - if (! user) { - user = get_current_user(); - if (! user) - exit(1); - } + if (! user) + user = sdb_get_current_user(); + else + user = strdup(user); + if (! user) + exit(1); input.client = sdb_client_create(host); if (! input.client) { sdb_log(SDB_LOG_ERR, "Failed to create client object"); + free(user); exit(1); } if (sdb_client_connect(input.client, user)) { sdb_log(SDB_LOG_ERR, "Failed to connect to SysDBd"); sdb_client_destroy(input.client); + free(user); exit(1); } @@ -309,7 +288,8 @@ main(int argc, char **argv) int status = execute_commands(input.client, commands); sdb_llist_destroy(commands); sdb_client_destroy(input.client); - if ((status != CONNECTION_OK) && (status != CONNECTION_DATA)) + free(user); + if ((status != SDB_CONNECTION_OK) && (status != SDB_CONNECTION_DATA)) exit(1); exit(0); } @@ -332,6 +312,7 @@ main(int argc, char **argv) hist_file, sdb_strerror(errno, errbuf, sizeof(errbuf))); } } + free(user); input.input = sdb_strbuf_create(2048); sdb_input_init(&input);