Hash the username in kiosk mode
So that the first part of $SSH_CLIENT can be passed as username.master
parent
5e7c31b637
commit
6d5bcf72c1
|
@ -1,4 +1,4 @@
|
||||||
.Dd March 17, 2021
|
.Dd May 27, 2021
|
||||||
.Dt CATGIRL 1
|
.Dt CATGIRL 1
|
||||||
.Os
|
.Os
|
||||||
.
|
.
|
||||||
|
@ -148,6 +148,8 @@ Disable the
|
||||||
.Ic /query ,
|
.Ic /query ,
|
||||||
.Ic /quote
|
.Ic /quote
|
||||||
commands.
|
commands.
|
||||||
|
Replace the username
|
||||||
|
with a hash of its original value.
|
||||||
.
|
.
|
||||||
.It Fl N Ar util , Cm notify = Ar util
|
.It Fl N Ar util , Cm notify = Ar util
|
||||||
Send notifications using a utility.
|
Send notifications using a utility.
|
||||||
|
|
8
chat.c
8
chat.c
|
@ -28,6 +28,7 @@
|
||||||
#include <err.h>
|
#include <err.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <inttypes.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
#include <poll.h>
|
#include <poll.h>
|
||||||
|
@ -268,6 +269,13 @@ int main(int argc, char *argv[]) {
|
||||||
if (!user) user = nick;
|
if (!user) user = nick;
|
||||||
if (!real) real = nick;
|
if (!real) real = nick;
|
||||||
|
|
||||||
|
if (self.kiosk) {
|
||||||
|
char *hash;
|
||||||
|
int n = asprintf(&hash, "%8" PRIx32, _hash(user));
|
||||||
|
if (n < 0) err(EX_OSERR, "asprintf");
|
||||||
|
user = hash;
|
||||||
|
}
|
||||||
|
|
||||||
// Modes defined in RFC 1459:
|
// Modes defined in RFC 1459:
|
||||||
set(&network.chanTypes, "#&");
|
set(&network.chanTypes, "#&");
|
||||||
set(&network.prefixes, "@+");
|
set(&network.prefixes, "@+");
|
||||||
|
|
9
chat.h
9
chat.h
|
@ -138,8 +138,7 @@ static inline uint idFor(const char *name) {
|
||||||
|
|
||||||
extern uint32_t hashInit;
|
extern uint32_t hashInit;
|
||||||
extern uint32_t hashBound;
|
extern uint32_t hashBound;
|
||||||
static inline enum Color hash(const char *str) {
|
static inline uint32_t _hash(const char *str) {
|
||||||
if (hashBound < Blue) return Default;
|
|
||||||
if (*str == '~') str++;
|
if (*str == '~') str++;
|
||||||
uint32_t hash = hashInit;
|
uint32_t hash = hashInit;
|
||||||
for (; *str; ++str) {
|
for (; *str; ++str) {
|
||||||
|
@ -147,7 +146,11 @@ static inline enum Color hash(const char *str) {
|
||||||
hash ^= *str;
|
hash ^= *str;
|
||||||
hash *= 0x27220A95;
|
hash *= 0x27220A95;
|
||||||
}
|
}
|
||||||
return Blue + hash % (hashBound + 1 - Blue);
|
return hash;
|
||||||
|
}
|
||||||
|
static inline enum Color hash(const char *str) {
|
||||||
|
if (hashBound < Blue) return Default;
|
||||||
|
return Blue + _hash(str) % (hashBound + 1 - Blue);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern struct Network {
|
extern struct Network {
|
||||||
|
|
Loading…
Reference in New Issue