Dolda2000 GitWeb
/
doldaconnect.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix typo.
[doldaconnect.git]
/
daemon
/
ui.c
diff --git
a/daemon/ui.c
b/daemon/ui.c
index
a2ec720
..
5152808
100644
(file)
--- a/
daemon/ui.c
+++ b/
daemon/ui.c
@@
-168,6
+168,7
@@
static void notifappend(struct notif *notif, ...);
struct uiuser *users = NULL;
struct uidata *actives = NULL;
struct socket *uisocket = NULL;
struct uiuser *users = NULL;
struct uidata *actives = NULL;
struct socket *uisocket = NULL;
+static time_t starttime;
static wchar_t *quoteword(wchar_t *word)
{
static wchar_t *quoteword(wchar_t *word)
{
@@
-589,7
+590,7
@@
static void cmd_fnetconnect(struct socket *sk, struct uidata *data, int argc, wc
args = NULL;
for(i = 3; i < argc - 1; i += 2)
newwcspair(argv[i], argv[i + 1], &args);
args = NULL;
for(i = 3; i < argc - 1; i += 2)
newwcspair(argv[i], argv[i + 1], &args);
- fn = fnetinitconnect(argv[1], buf, args);
+ fn = fnetinitconnect(argv[1],
data->userinfo->name,
buf, args);
err = errno;
free(buf);
if(fn == NULL)
err = errno;
free(buf);
if(fn == NULL)
@@
-640,6
+641,11
@@
static void cmd_disconnect(struct socket *sk, struct uidata *data, int argc, wch
sq(sk, 0, L"510", L"No such node", NULL);
return;
}
sq(sk, 0, L"510", L"No such node", NULL);
return;
}
+ if(wpfind(fn->args, L"locked") && !((data->userinfo->perms & PERM_ADMIN) || !wcscmp(data->userinfo->name, fn->owner)))
+ {
+ sq(sk, 0, L"502", L"This node is locked and you are neither administrator nor its owner", NULL);
+ return;
+ }
killfnetnode(fn);
unlinkfnetnode(fn);
}
killfnetnode(fn);
unlinkfnetnode(fn);
}
@@
-685,7
+691,7
@@
static void cmd_lspeers(struct socket *sk, struct uidata *data, int argc, wchar_
} else {
for(peer = fn->peers; peer != NULL; peer = peer->next)
{
} else {
for(peer = fn->peers; peer != NULL; peer = peer->next)
{
- sq(sk, 2 | ((peer->next != NULL)?1:0), L"200",
peer->id
, peer->nick, NULL);
+ sq(sk, 2 | ((peer->next != NULL)?1:0), L"200",
L"%%s", peer->id, L"%%s"
, peer->nick, NULL);
for(i = 0; i < peer->dinum; i++)
{
if(peer->peerdi[i].datum->datatype == FNPD_INT)
for(i = 0; i < peer->dinum; i++)
{
if(peer->peerdi[i].datum->datatype == FNPD_INT)
@@
-698,7
+704,7
@@
static void cmd_lspeers(struct socket *sk, struct uidata *data, int argc, wchar_
sq(sk, 2, peer->peerdi[i].datum->id, buf, NULL);
}
if((peer->peerdi[i].datum->datatype == FNPD_STR) && (peer->peerdi[i].data.str != NULL))
sq(sk, 2, peer->peerdi[i].datum->id, buf, NULL);
}
if((peer->peerdi[i].datum->datatype == FNPD_STR) && (peer->peerdi[i].data.str != NULL))
- sq(sk, 2, peer->peerdi[i].datum->id, peer->peerdi[i].data.str, NULL);
+ sq(sk, 2, peer->peerdi[i].datum->id,
L"%%s",
peer->peerdi[i].data.str, NULL);
}
sq(sk, 0, NULL);
}
}
sq(sk, 0, NULL);
}
@@
-1251,7
+1257,7
@@
static void cmd_register(struct socket *sk, struct uidata *data, int argc, wchar
return;
}
for(d2 = actives; d2 != NULL; d2 = d2->next) {
return;
}
for(d2 = actives; d2 != NULL; d2 = d2->next) {
- if((d2 != data) && d2->regname && !wcscmp(d2->regname, argv[1])) {
+ if((d2 != data) &&
(d2->userinfo == data->userinfo) &&
d2->regname && !wcscmp(d2->regname, argv[1])) {
sq(sk, 0, L"516", L"Name already in use", NULL);
return;
}
sq(sk, 0, L"516", L"Name already in use", NULL);
return;
}
@@
-1277,12
+1283,12
@@
static void cmd_sendmsg(struct socket *sk, struct uidata *data, int argc, wchar_
if(argv[1][0] == L'#') {
rcptid = wcstol(argv[1] + 1, NULL, 0);
for(rcpt = actives; rcpt != NULL; rcpt = rcpt->next) {
if(argv[1][0] == L'#') {
rcptid = wcstol(argv[1] + 1, NULL, 0);
for(rcpt = actives; rcpt != NULL; rcpt = rcpt->next) {
- if(
rcpt->id == rcptid
)
+ if(
(rcpt->userinfo == data->userinfo) && (rcpt->id == rcptid)
)
break;
}
} else {
for(rcpt = actives; rcpt != NULL; rcpt = rcpt->next) {
break;
}
} else {
for(rcpt = actives; rcpt != NULL; rcpt = rcpt->next) {
- if(rcpt->regname && !wcscmp(rcpt->regname, argv[1]))
+ if(
(rcpt->userinfo == data->userinfo) &&
rcpt->regname && !wcscmp(rcpt->regname, argv[1]))
break;
}
}
break;
}
}
@@
-1304,6
+1310,11
@@
static void cmd_sendmsg(struct socket *sk, struct uidata *data, int argc, wchar_
sq(sk, 0, L"200", L"Message sent", NULL);
}
sq(sk, 0, L"200", L"Message sent", NULL);
}
+static void cmd_uptime(struct socket *sk, struct uidata *data, int argc, wchar_t **argv)
+{
+ sq(sk, 0, L"200", L"%%i", time(NULL) - starttime, NULL);
+}
+
#undef haveargs
#undef havepriv
#undef haveargs
#undef havepriv
@@
-1342,6
+1353,7
@@
static struct command commands[] =
{L"transstatus", cmd_transstatus},
{L"register", cmd_register},
{L"sendmsg", cmd_sendmsg},
{L"transstatus", cmd_transstatus},
{L"register", cmd_register},
{L"sendmsg", cmd_sendmsg},
+ {L"uptime", cmd_uptime},
{NULL, NULL}
};
{NULL, NULL}
};
@@
-2153,6
+2165,7
@@
static int init(int hup)
}
if(!hup)
{
}
if(!hup)
{
+ starttime = time(NULL);
if(uisocket != NULL)
putsock(uisocket);
if((uisocket = netcstcplisten(confgetint("ui", "port"), 1, uiaccept, NULL)) == NULL)
if(uisocket != NULL)
putsock(uisocket);
if((uisocket = netcstcplisten(confgetint("ui", "port"), 1, uiaccept, NULL)) == NULL)