git-svn-id: svn+ssh://svn.dolda2000.com/srv/svn/repos/src/doldaconnect@1017
959494ce-11ee-0310-bf91-
de5d638817bd
int dc_handleread(void);
int dc_handlewrite(void);
int dc_connect(char *host);
int dc_handleread(void);
int dc_handlewrite(void);
int dc_connect(char *host);
+int dc_connectlocal(void);
struct dc_intresp *dc_interpret(struct dc_response *resp);
void dc_freeires(struct dc_intresp *ires);
int dc_checkprotocol(struct dc_response *resp, int revision);
struct dc_intresp *dc_interpret(struct dc_response *resp);
void dc_freeires(struct dc_intresp *ires);
int dc_checkprotocol(struct dc_response *resp, int revision);
libdcui_la_SOURCES = uilib.c uimisc.c
libdcui_la_LIBADD = @KRB5_LDADD@ $(top_srcdir)/common/libcommon.a
libdcui_la_SOURCES = uilib.c uimisc.c
libdcui_la_LIBADD = @KRB5_LDADD@ $(top_srcdir)/common/libcommon.a
-libdcui_la_LDFLAGS = -version-info 1:0:0
+libdcui_la_LDFLAGS = -version-info 2:0:1
BUILT_SOURCES = initcmds.h
BUILT_SOURCES = initcmds.h
-static struct addrinfo *defaulthost(void)
+static struct addrinfo *getlocalai(void)
{
struct addrinfo *ret;
struct passwd *pwd;
char *tmp;
{
struct addrinfo *ret;
struct passwd *pwd;
char *tmp;
- char dn[1024];
-
- if(((tmp = getenv("DCSERVER")) != NULL) && *tmp)
- return(resolvhost(tmp));
ret = NULL;
if((getuid() != 0) && ((pwd = getpwuid(getuid())) != NULL))
{
tmp = sprintf2("/tmp/doldacond-%s", pwd->pw_name);
ret = NULL;
if((getuid() != 0) && ((pwd = getpwuid(getuid())) != NULL))
{
tmp = sprintf2("/tmp/doldacond-%s", pwd->pw_name);
- ret = gaicat(ret, unixgai(SOCK_STREAM, tmp));
+ ret = unixgai(SOCK_STREAM, tmp);
free(tmp);
}
ret = gaicat(ret, unixgai(SOCK_STREAM, "/var/run/doldacond.sock"));
free(tmp);
}
ret = gaicat(ret, unixgai(SOCK_STREAM, "/var/run/doldacond.sock"));
+ return(ret);
+}
+
+static struct addrinfo *defaulthost(void)
+{
+ struct addrinfo *ret;
+ char *tmp;
+ char dn[1024];
+
+ if(((tmp = getenv("DCSERVER")) != NULL) && *tmp)
+ return(resolvhost(tmp));
+ ret = getlocalai();
ret = gaicat(ret, resolvtcp("localhost", 1500));
if(!getdomainname(dn, sizeof(dn)) && *dn && strcmp(dn, "(none)"))
ret = gaicat(ret, resolvsrv(dn));
return(ret);
}
ret = gaicat(ret, resolvtcp("localhost", 1500));
if(!getdomainname(dn, sizeof(dn)) && *dn && strcmp(dn, "(none)"))
ret = gaicat(ret, resolvsrv(dn));
return(ret);
}
-int dc_connect(char *host)
+static int dc_connectai(struct addrinfo *hosts)
{
struct qcmd *qcmd;
int errnobak;
{
struct qcmd *qcmd;
int errnobak;
state = -1;
if(hostlist != NULL)
freeaddrinfo(hostlist);
state = -1;
if(hostlist != NULL)
freeaddrinfo(hostlist);
- if(!host || !*host)
- hostlist = defaulthost();
- else
- hostlist = resolvhost(host);
- if(hostlist == NULL)
- return(-1);
for(curhost = hostlist; curhost != NULL; curhost = curhost->ai_next)
{
if((fd = socket(curhost->ai_family, curhost->ai_socktype, curhost->ai_protocol)) < 0)
for(curhost = hostlist; curhost != NULL; curhost = curhost->ai_next)
{
if((fd = socket(curhost->ai_family, curhost->ai_socktype, curhost->ai_protocol)) < 0)
+int dc_connect(char *host)
+{
+ struct addrinfo *ai;
+ int ret;
+
+ if(!host || !*host)
+ ai = defaulthost();
+ else
+ ai = resolvhost(host);
+ if(ai == NULL)
+ return(-1);
+ if((ret = dc_connectai(ai)) != 0)
+ freeaddrinfo(ai);
+ return(ret);
+}
+
+int dc_connectlocal(void)
+{
+ struct addrinfo *ai;
+ int ret;
+
+ ai = getlocalai();
+ if((ret = dc_connectai(ai)) != 0)
+ freeaddrinfo(ai);
+ return(ret);
+}
+
struct dc_intresp *dc_interpret(struct dc_response *resp)
{
int i;
struct dc_intresp *dc_interpret(struct dc_response *resp)
{
int i;