Resolve KASM-2238 "Feature/ freeze session"

This commit is contained in:
Justin Travis
2022-01-28 12:24:38 +00:00
parent 13331295ac
commit 42d7ff015d
15 changed files with 156 additions and 70 deletions

View File

@@ -60,6 +60,8 @@ struct kasmpasswd_t *readkasmpasswd(const char path[]) {
strcpy(set->entries[cur].user, buf);
strcpy(set->entries[cur].password, pw);
if (strchr(perms, 'r'))
set->entries[cur].read = 1;
if (strchr(perms, 'w'))
set->entries[cur].write = 1;
if (strchr(perms, 'o'))
@@ -90,22 +92,17 @@ void writekasmpasswd(const char path[], const struct kasmpasswd_t *set) {
return;
}
static const char * const perms[] = {
"",
"w",
"o",
"ow"
};
unsigned i;
for (i = 0; i < set->num; i++) {
if (!set->entries[i].user[0])
continue;
fprintf(f, "%s:%s:%s\n",
fprintf(f, "%s:%s:%s%s%s\n",
set->entries[i].user,
set->entries[i].password,
perms[set->entries[i].owner * 2 + set->entries[i].write]);
set->entries[i].read ? "r" : "",
set->entries[i].write ? "w" : "",
set->entries[i].owner ? "o" : "");
}
fsync(fileno(f));

View File

@@ -8,6 +8,7 @@ extern "C" {
struct kasmpasswd_entry_t {
char user[32];
char password[128];
unsigned char read : 1;
unsigned char write : 1;
unsigned char owner : 1;
};

View File

@@ -34,6 +34,7 @@
static void usage(const char *prog)
{
fprintf(stderr, "Usage: %s -u username [-wnod] [file]\n"
"-r Read permission\n"
"-w Write permission\n"
"-o Owner\n"
"-n Don't change password, change permissions only\n"
@@ -118,10 +119,10 @@ int main(int argc, char** argv)
{
const char *fname = NULL;
const char *user = NULL;
const char args[] = "u:wnod";
const char args[] = "u:rwnod";
int opt;
unsigned char nopass = 0, writer = 0, owner = 0, deleting = 0;
unsigned char nopass = 0, reader = 0, writer = 0, owner = 0, deleting = 0;
while ((opt = getopt(argc, argv, args)) != -1) {
switch (opt) {
@@ -135,6 +136,9 @@ int main(int argc, char** argv)
case 'n':
nopass = 1;
break;
case 'r':
reader = 1;
break;
case 'w':
writer = 1;
break;
@@ -150,7 +154,7 @@ int main(int argc, char** argv)
}
}
if (deleting && (nopass || writer || owner))
if (deleting && (nopass || reader || writer || owner))
usage(argv[0]);
if (!user)
@@ -175,6 +179,7 @@ int main(int argc, char** argv)
if (nopass) {
for (i = 0; i < set->num; i++) {
if (!strcmp(set->entries[i].user, user)) {
set->entries[i].read = reader;
set->entries[i].write = writer;
set->entries[i].owner = owner;
@@ -211,6 +216,7 @@ int main(int argc, char** argv)
strcpy(set->entries[i].user, user);
strcpy(set->entries[i].password, encrypted);
set->entries[i].read = reader;
set->entries[i].write = writer;
set->entries[i].owner = owner;