/*
* Dolda Connect - Modular multiuser Direct Connect-style client
- * Copyright (C) 2004 Fredrik Tolf (fredrik@dolda2000.com)
+ * Copyright (C) 2004 Fredrik Tolf <fredrik@dolda2000.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include <unistd.h>
#include <stdlib.h>
-/* I'm very unsure about this, but for now it defines wcstoll (which
- * should be defined anyway) and doesn't break anything... let's keep
- * two eyes wide open, though. */
-#define __USE_ISOC99
#include <wchar.h>
#include <wctype.h>
#include <pwd.h>
struct dc_fnetnode *dc_fnetnodes = NULL;
struct dc_transfer *dc_transfers = NULL;
-static void message(char *format, ...)
+static void message(int bits, char *format, ...)
{
- static int on = -1;
+ static int hb = -1;
char *v;
va_list args;
- if(on == -1)
+ if(hb == -1)
{
- on = 0;
+ hb = 0;
if((v = getenv("LIBDCUI_MSG")) != NULL)
- {
- if(strtol(v, NULL, 0) & 1)
- on = 1;
- }
+ hb = strtol(v, NULL, 0) & 65535;
}
- if(on == 1)
+ if(hb & bits)
{
va_start(args, format);
vfprintf(stderr, format, args);
krb->reqbuf.data = NULL;
if((ret = krb5_fwd_tgt_creds(krb->context, krb->authcon, NULL, krb->servcreds->client, krb->servcreds->server, 0, 1, &krb->reqbuf)) != 0)
{
- message("krb5_fwd_tgt_creds reported an error: %s\n", error_message(ret));
+ message(1, "krb5_fwd_tgt_creds reported an error: %s\n", error_message(ret));
dc_queuecmd(logincallback, data, L"pass", L"31", NULL);
krb->fwd = 0;
krb->state = 2;
if(dc_gethostname() == NULL)
{
- message("cannot use krb5 without a host name");
+ message(1, "cannot use krb5 without a host name\n");
return(1);
}
krb = smalloc(sizeof(*krb));
data->mechdata = krb;
if((ret = krb5_init_context(&krb->context)) != 0)
{
- message("krb5_init_context reported an error: %s\n", error_message(ret));
+ message(1, "krb5_init_context reported an error: %s\n", error_message(ret));
return(1);
}
if((ret = krb5_auth_con_init(krb->context, &krb->authcon)) != 0)
{
- message("krb5_auth_con_init reported an error: %s\n", error_message(ret));
+ message(1, "krb5_auth_con_init reported an error: %s\n", error_message(ret));
return(1);
}
krb5_auth_con_setflags(krb->context, krb->authcon, KRB5_AUTH_CONTEXT_DO_SEQUENCE);
if((ret = krb5_sname_to_principal(krb->context, dc_gethostname(), "doldacond", KRB5_NT_SRV_HST, &krb->sprinc)) != 0)
{
- message("krb5_sname_to_principal reported an error: %s\n", error_message(ret));
+ message(1, "krb5_sname_to_principal reported an error: %s\n", error_message(ret));
return(1);
}
if((ret = krb5_cc_default(krb->context, &krb->ccache)) != 0)
{
- message("krb5_cc_default reported an error: %s\n", error_message(ret));
+ message(1, "krb5_cc_default reported an error: %s\n", error_message(ret));
return(1);
}
if((ret = krb5_cc_get_principal(krb->context, krb->ccache, &krb->myprinc)) != 0)
{
- message("krb5_cc_default reported an error: %s\n", error_message(ret));
+ message(1, "krb5_cc_default reported an error: %s\n", error_message(ret));
return(1);
}
memset(&creds, 0, sizeof(creds));
creds.server = krb->sprinc;
if((ret = krb5_get_credentials(krb->context, 0, krb->ccache, &creds, &krb->servcreds)) != 0)
{
- message("krb5_get_credentials reported an error: %s\n", error_message(ret));
+ message(1, "krb5_get_credentials reported an error: %s\n", error_message(ret));
return(1);
}
/* WTF is this checksum stuff?! The Krb docs don't say a word about it! */
cksum.length = strlen(cksum.data);
if((ret = krb5_mk_req_extended(krb->context, &krb->authcon, AP_OPTS_MUTUAL_REQUIRED, &cksum, krb->servcreds, &krb->reqbuf)) != 0)
{
- message("krb5_mk_req_extended reported an error: %s\n", error_message(ret));
+ message(1, "krb5_mk_req_extended reported an error: %s\n", error_message(ret));
return(1);
}
free(cksum.data);
{
odata = data->mechdata;
data->mechdata = NULL;
+ message(4, "trying auth mech %ls\n", authmechs[i].name);
if((authmechs[i].init != NULL) && authmechs[i].init(data))
{
if(authmechs[i].release != NULL)
authmechs[i].release(data);
data->mechdata = odata;
- message("authentication mechanism %ls failed, trying further...\n", authmechs[i].name);
+ message(2, "authentication mechanism %ls failed, trying further...\n", authmechs[i].name);
} else {
if((data->mech != NULL) && data->mech->release != NULL)
{
}
transfer->dir = ires->argv[1].val.num;
transfer->state = ires->argv[2].val.num;
- transfer->size = ires->argv[6].val.num;
- transfer->curpos = ires->argv[7].val.num;
+ transfer->size = ires->argv[6].val.lnum;
+ transfer->curpos = ires->argv[7].val.lnum;
if(transfer->hash != NULL)
{
free(transfer->hash);
transfer->peerid = swcsdup(ires->argv[3].val.str);
transfer->peernick = swcsdup(ires->argv[4].val.str);
transfer->path = swcsdup(ires->argv[5].val.str);
- transfer->size = ires->argv[6].val.num;
- transfer->curpos = ires->argv[7].val.num;
+ transfer->size = ires->argv[6].val.lnum;
+ transfer->curpos = ires->argv[7].val.lnum;
if(wcslen(ires->argv[8].val.str) > 0)
transfer->hash = swcsdup(ires->argv[8].val.str);
transfer->found = 1;
break;
case 613:
if((transfer = dc_findtransfer(ires->argv[0].val.num)) != NULL)
- transfer->size = ires->argv[1].val.num;
+ transfer->size = ires->argv[1].val.lnum;
break;
case 614:
if((transfer = dc_findtransfer(ires->argv[0].val.num)) != NULL)
break;
case 615:
if((transfer = dc_findtransfer(ires->argv[0].val.num)) != NULL)
- transfer->curpos = ires->argv[1].val.num;
+ transfer->curpos = ires->argv[1].val.lnum;
break;
case 616:
if((transfer = dc_findtransfer(ires->argv[0].val.num)) != NULL)