+static struct sockaddr_un *makeunixname(void)
+{
+ static struct sockaddr_un buf;
+ char *val;
+ struct passwd *pwd;
+ uid_t uid;
+
+ memset(&buf, 0, sizeof(buf));
+ buf.sun_family = PF_UNIX;
+ if((val = icswcstombs(confgetstr("ui", "unixsock"), NULL, NULL)) == NULL) {
+ flog(LOG_WARNING, "could not map Unix socket name into local charset: %s", strerror(errno));
+ return(NULL);
+ }
+ if(!strcmp(val, "none"))
+ return(NULL);
+ if(!strcmp(val, "default"))
+ {
+ if((uid = getuid()) == 0)
+ {
+ strcpy(buf.sun_path, "/var/run/doldacond.sock");
+ return(&buf);
+ } else {
+ if((pwd = getpwuid(uid)) == NULL)
+ {
+ flog(LOG_ERR, "could not get passwd entry for current user: %s", strerror(errno));
+ return(NULL);
+ }
+ strcpy(buf.sun_path, "/tmp/doldacond-");
+ strcat(buf.sun_path, pwd->pw_name);
+ return(&buf);
+ }
+ }
+ if(strchr(val, '/'))
+ {
+ strcpy(buf.sun_path, val);
+ return(&buf);
+ }
+ flog(LOG_WARNING, "invalid Unix socket name: %s", val);
+ return(NULL);
+}
+
+static int tcpportupdate(struct configvar *var, void *uudata)