- mutex->sem_id = semget(mutex->sem_key, 1, IPC_CREAT | IPC_EXCL | 0700);
- if (mutex->sem_id != -1) {
- if (semctl(mutex->sem_id, 0, SETVAL, 1) == -1) {
- logmsg(LL_ERR, "initialize sem %x: %s\n",
- mutex->sem_key, strerror(errno));
- return -1;
- }
-
- logmsg(LL_DEBUG, "created & initialized sem %x id %d for %s\n",
- mutex->sem_key, mutex->sem_id, mutex->sem_name);
- } else {
- if (errno != EEXIST) {
- logmsg(LL_ERR, "create sem %x: %s\n",
- mutex->sem_key, strerror(errno));
- return -1;
- }
-
- /* already created by someone else, simply get it.
- * Note there's still a small window of racing between create
- * and initialize, a flaw in semaphore semantics */
- mutex->sem_id = semget(mutex->sem_key, 0, 0700);
- if (mutex->sem_id == -1) {
- if (errno == ENOENT) {
- logmsg(LL_WARN, "sem %x just disappeared "
- "under us, try again\n", mutex->sem_key);
- return 1;
- }
-
- logmsg(LL_ERR, "get sem %x: %s\n", mutex->sem_key,
- strerror(errno));
- return -1;
- }
-
- logmsg(LL_TRACE, "got sem %x id %d for %s\n",
- mutex->sem_key, mutex->sem_id, mutex->sem_name);
- }
-
- return 0;
+ mutex->sem_id = semget(mutex->sem_key, 1, IPC_CREAT | IPC_EXCL | 0700);
+ if (mutex->sem_id != -1) {
+ if (semctl(mutex->sem_id, 0, SETVAL, 1) == -1) {
+ logmsg(LL_ERR, "initialize sem %x: %s\n",
+ mutex->sem_key, strerror(errno));
+ return -1;
+ }
+
+ logmsg(LL_DEBUG, "created & initialized sem %x id %d for %s\n",
+ mutex->sem_key, mutex->sem_id, mutex->sem_name);
+ } else {
+ if (errno != EEXIST) {
+ logmsg(LL_ERR, "create sem %x: %s\n",
+ mutex->sem_key, strerror(errno));
+ return -1;
+ }
+
+ /* already created by someone else, simply get it.
+ * Note there's still a small window of racing between create
+ * and initialize, a flaw in semaphore semantics */
+ mutex->sem_id = semget(mutex->sem_key, 0, 0700);
+ if (mutex->sem_id == -1) {
+ if (errno == ENOENT) {
+ logmsg(LL_WARN, "sem %x just disappeared "
+ "under us, try again\n", mutex->sem_key);
+ return 1;
+ }
+
+ logmsg(LL_ERR, "get sem %x: %s\n", mutex->sem_key,
+ strerror(errno));
+ return -1;
+ }
+
+ logmsg(LL_TRACE, "got sem %x id %d for %s\n",
+ mutex->sem_key, mutex->sem_id, mutex->sem_name);
+ }
+
+ return 0;
- struct lgss_mutex_s *sem = &lgss_mutexes[mid];
- struct sembuf sembuf;
- int rc;
-
- lassert(mid < LGSS_MUTEX_MAX);
-
- logmsg(LL_TRACE, "locking mutex %x for %s\n",
- sem->sem_key, sem->sem_name);
-
- do {
- rc = lgss_mutex_get(sem);
- if (rc < 0)
- return rc;
- } while (rc);
-
- sembuf.sem_num = 0;
- sembuf.sem_op = -1;
- sembuf.sem_flg = SEM_UNDO;
-
- if (semop(sem->sem_id, &sembuf, 1) != 0) {
- logmsg(LL_ERR, "lock mutex %x: %s\n", sem->sem_key,
- strerror(errno));
- return -1;
- }
-
- logmsg(LL_DEBUG, "locked mutex %x for %s\n",
- sem->sem_key, sem->sem_name);
- return 0;
+ struct lgss_mutex_s *sem = &lgss_mutexes[mid];
+ struct sembuf sembuf;
+ int rc;
+
+ lassert(mid < LGSS_MUTEX_MAX);
+
+ logmsg(LL_TRACE, "locking mutex %x for %s\n",
+ sem->sem_key, sem->sem_name);
+
+ do {
+ rc = lgss_mutex_get(sem);
+ if (rc < 0)
+ return rc;
+ } while (rc);
+
+ sembuf.sem_num = 0;
+ sembuf.sem_op = -1;
+ sembuf.sem_flg = SEM_UNDO;
+
+ if (semop(sem->sem_id, &sembuf, 1) != 0) {
+ logmsg(LL_ERR, "lock mutex %x: %s\n", sem->sem_key,
+ strerror(errno));
+ return -1;
+ }
+
+ logmsg(LL_DEBUG, "locked mutex %x for %s\n",
+ sem->sem_key, sem->sem_name);
+ return 0;
- va_list ap;
- u_int32_t maj_stat1, min_stat1;
- u_int32_t maj_stat2, min_stat2;
- gss_buffer_desc maj_gss_buf = GSS_C_EMPTY_BUFFER;
- gss_buffer_desc min_gss_buf = GSS_C_EMPTY_BUFFER;
- char buf[1024];
- char maj_buf[30], min_buf[30];
- char *maj_msg, *min_msg;
- int offset;
- uint32_t msg_ctx = 0;
-
- /* Get major status message */
- maj_stat1 = gss_display_status(&min_stat1, major, GSS_C_GSS_CODE,
- mech, &msg_ctx, &maj_gss_buf);
- if (maj_stat1 != GSS_S_COMPLETE) {
- snprintf(maj_buf, sizeof(maj_buf), "(0x%08x)", major);
- maj_msg = &maj_buf[0];
- } else {
- maj_msg = maj_gss_buf.value;
- }
-
- /* Get minor status message */
- maj_stat2 = gss_display_status(&min_stat2, minor, GSS_C_MECH_CODE,
- mech, &msg_ctx, &min_gss_buf);
- if (maj_stat2 != GSS_S_COMPLETE) {
- snprintf(min_buf, sizeof(min_buf), "(0x%08x)", minor);
- min_msg = &min_buf[0];
- } else {
- min_msg = min_gss_buf.value;
- }
-
- /* arrange & log message */
- offset = snprintf(buf, sizeof(buf), "[%d]:%s:%s(): ",
- getpid(), log_prefix[level], func);
-
- va_start(ap, format);
- offset += vsnprintf(buf + offset, sizeof(buf) - offset, format, ap);
- va_end(ap);
-
- snprintf(buf + offset, sizeof(buf) - offset, ": GSSAPI: %s - %s\n",
- maj_msg, min_msg);
-
- syslog(LOG_INFO, "%s", buf);
-
- /* release buffers */
- if (maj_gss_buf.length != 0)
- gss_release_buffer(&min_stat1, &maj_gss_buf);
- if (min_gss_buf.length != 0)
- gss_release_buffer(&min_stat2, &min_gss_buf);
+ va_list ap;
+ uint32_t maj_stat1, min_stat1;
+ uint32_t maj_stat2, min_stat2;
+ gss_buffer_desc maj_gss_buf = GSS_C_EMPTY_BUFFER;
+ gss_buffer_desc min_gss_buf = GSS_C_EMPTY_BUFFER;
+ char buf[1024];
+ char maj_buf[30], min_buf[30];
+ char *maj_msg, *min_msg;
+ int offset;
+ uint32_t msg_ctx = 0;
+
+ /* Get major status message */
+ maj_stat1 = gss_display_status(&min_stat1, major, GSS_C_GSS_CODE,
+ mech, &msg_ctx, &maj_gss_buf);
+ if (maj_stat1 != GSS_S_COMPLETE) {
+ snprintf(maj_buf, sizeof(maj_buf), "(0x%08x)", major);
+ maj_msg = &maj_buf[0];
+ } else {
+ maj_msg = maj_gss_buf.value;
+ }
+
+ /* Get minor status message */
+ maj_stat2 = gss_display_status(&min_stat2, minor, GSS_C_MECH_CODE,
+ mech, &msg_ctx, &min_gss_buf);
+ if (maj_stat2 != GSS_S_COMPLETE) {
+ snprintf(min_buf, sizeof(min_buf), "(0x%08x)", minor);
+ min_msg = &min_buf[0];
+ } else {
+ min_msg = min_gss_buf.value;
+ }
+
+ /* arrange & log message */
+ offset = scnprintf(buf, sizeof(buf), "[%d]:%s:%s(): ",
+ getpid(), log_prefix[level], func);
+
+ va_start(ap, format);
+ offset += vscnprintf(buf + offset, sizeof(buf) - offset, format, ap);
+ va_end(ap);
+
+ snprintf(buf + offset, sizeof(buf) - offset, ": GSSAPI: %s - %s\n",
+ maj_msg, min_msg);
+
+ syslog(LOG_INFO, "%s", buf);
+
+ /* release buffers */
+ if (maj_gss_buf.length != 0)
+ gss_release_buffer(&min_stat1, &maj_gss_buf);
+ if (min_gss_buf.length != 0)
+ gss_release_buffer(&min_stat2, &min_gss_buf);