mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-05-23 12:41:29 +02:00
52216: metafy usernames to allow for them to be UTF-8 encoded
This commit is contained in:
parent
83f8a71a7c
commit
4878c2b130
2 changed files with 21 additions and 8 deletions
|
@ -1,5 +1,8 @@
|
|||
2023-10-10 Oliver Kiddle <opk@zsh.org>
|
||||
|
||||
* 52216: Src/Modules/watch.c: metafy usernames to allow for
|
||||
them to be UTF-8 encoded
|
||||
|
||||
* 52214: Src/subst.c: allow extra byte for nul in allocation
|
||||
|
||||
* unposted (cf. 52166): Functions/Misc/run-help-svk:
|
||||
|
|
|
@ -423,20 +423,23 @@ watchlog2(int inout, WATCH_STRUCT_UTMP *u, char *fmt, int prnt, int fini)
|
|||
/* See if the watch entry matches */
|
||||
|
||||
static int
|
||||
watchlog_match(char *teststr, char *actual, int len)
|
||||
watchlog_match(char *teststr, char *actual, size_t buflen)
|
||||
{
|
||||
int ret = 0;
|
||||
Patprog pprog;
|
||||
char *str = dupstring(teststr);
|
||||
int len = strnlen(actual, buflen);
|
||||
char *user = metafy(actual, len,
|
||||
len == buflen ? META_HEAPDUP : META_USEHEAP);
|
||||
|
||||
tokenize(str);
|
||||
|
||||
if ((pprog = patcompile(str, PAT_STATIC, 0))) {
|
||||
queue_signals();
|
||||
if (pattry(pprog, actual))
|
||||
if (pattry(pprog, user))
|
||||
ret = 1;
|
||||
unqueue_signals();
|
||||
} else if (!strncmp(actual, teststr, len))
|
||||
} else if (!strcmp(user, teststr))
|
||||
ret = 1;
|
||||
return ret;
|
||||
}
|
||||
|
@ -456,10 +459,17 @@ watchlog(int inout, WATCH_STRUCT_UTMP *u, char **w, char *fmt)
|
|||
(void)watchlog2(inout, u, fmt, 1, 0);
|
||||
return;
|
||||
}
|
||||
if (*w && !strcmp(*w, "notme") &&
|
||||
strncmp(u->ut_name, get_username(), sizeof(u->ut_name))) {
|
||||
(void)watchlog2(inout, u, fmt, 1, 0);
|
||||
return;
|
||||
if (*w && !strcmp(*w, "notme")) {
|
||||
int len = strnlen(u->ut_name, sizeof(u->ut_name));
|
||||
char *username = metafy(u->ut_name, len,
|
||||
(len == sizeof(u->ut_name) ?
|
||||
META_HEAPDUP /* allow for nul terminator */ :
|
||||
META_USEHEAP));
|
||||
if (strcmp(username, get_username())) {
|
||||
(void)watchlog2(inout, u, fmt, 1, 0);
|
||||
return;
|
||||
}
|
||||
w++;
|
||||
}
|
||||
for (; *w; w++) {
|
||||
bad = 0;
|
||||
|
@ -488,7 +498,7 @@ watchlog(int inout, WATCH_STRUCT_UTMP *u, char **w, char *fmt)
|
|||
for (vv = ++v; *vv && *vv != '%'; vv++);
|
||||
sav = *vv;
|
||||
*vv = '\0';
|
||||
if (!watchlog_match(v, u->ut_host, strlen(v)))
|
||||
if (!watchlog_match(v, u->ut_host, sizeof(u->ut_host)))
|
||||
bad = 1;
|
||||
*vv = sav;
|
||||
v = vv;
|
||||
|
|
Loading…
Reference in a new issue