diff --git a/src/client/sysdb.c b/src/client/sysdb.c
index 073e40ef6c0386709a2a487274543d341e8d8d89..fa71eed9d064b04d86037412988e5b10a5c1c7b6 100644 (file)
--- a/src/client/sysdb.c
+++ b/src/client/sysdb.c
#include "client/sysdb.h"
#include "client/sock.h"
+#include "utils/error.h"
+
+#include <errno.h>
#if HAVE_LIBGEN_H
# include <libgen.h>
#include <unistd.h>
+#include <sys/types.h>
+
+#include <pwd.h>
+
#ifndef DEFAULT_SOCKET
# define DEFAULT_SOCKET "unix:"LOCALSTATEDIR"/run/sysdbd.sock"
#endif
exit(0);
} /* exit_version */
+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 */
+
int
main(int argc, char **argv)
{
+ sdb_client_t *client;
+
+ const char *host = NULL;
+ const char *user = NULL;
+
while (42) {
- int opt = getopt(argc, argv, "hV");
+ int opt = getopt(argc, argv, "H:U:hV");
if (-1 == opt)
break;
switch (opt) {
+ case 'H':
+ host = optarg;
+ break;
+ case 'U':
+ user = optarg;
+ break;
+
case 'h':
exit_usage(argv[0], 0);
break;
if (optind < argc)
exit_usage(argv[0], 1);
- printf("SysDB client "SDB_CLIENT_VERSION_STRING
+ if (! host)
+ host = DEFAULT_SOCKET;
+ if (! user)
+ user = get_current_user();
+
+ client = sdb_client_create(host);
+ if (! client) {
+ sdb_log(SDB_LOG_ERR, "Failed to create client object");
+ exit(1);
+ }
+ if (sdb_client_connect(client, user)) {
+ sdb_log(SDB_LOG_ERR, "Failed to connect to SysDBd");
+ sdb_client_destroy(client);
+ exit(1);
+ }
+
+ sdb_log(SDB_LOG_INFO, "SysDB client "SDB_CLIENT_VERSION_STRING
SDB_CLIENT_VERSION_EXTRA"\n");
+
+ sdb_client_destroy(client);
return 0;
} /* main */