Seat *s;
DBusMessageIter iter;
int r;
- char *id, *p;
+ char *id = NULL, *p;
int vtnr = -1;
int pipe_fds[2] = { -1, -1 };
DBusMessage *reply = NULL;
audit_session_from_pid(leader, &audit_id);
- if (audit_id > 0)
+ if (audit_id > 0) {
asprintf(&id, "%lu", (unsigned long) audit_id);
- else
- asprintf(&id, "c%lu", ++m->session_counter);
- if (!id) {
- r = -ENOMEM;
- goto fail;
- }
+ if (!id) {
+ r = -ENOMEM;
+ goto fail;
+ }
- if (hashmap_get(m->sessions, id)) {
- r = -EEXIST;
- goto fail;
+ if (hashmap_get(m->sessions, id)) {
+ r = -EEXIST;
+ goto fail;
+ }
+
+ } else {
+ do {
+ free(id);
+ asprintf(&id, "c%lu", ++m->session_counter);
+
+ if (!id) {
+ r = -ENOMEM;
+ goto fail;
+ }
+
+ } while (hashmap_get(m->sessions, id));
}
r = manager_add_session(m, user, id, &session);
* subscribe to fd HUP
* D-Bus method: AttachDevice(seat, device);
* D-Bus method: PermitLinger(user, bool b);
+ * properly handle if two sessions with the same loginuid are attempted to be created
*
* non-local X11 server
* reboot/shutdown halt management