Resolve KASM-2238 "Feature/ freeze session"
This commit is contained in:
@@ -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));
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user