]> source.dussan.org Git - rspamd.git/commitdiff
[Feature] Add function to create temporary shared memory mapping
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 10 Jun 2016 08:48:20 +0000 (09:48 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Fri, 10 Jun 2016 08:48:20 +0000 (09:48 +0100)
src/libutil/util.c
src/libutil/util.h

index 212cb7f1b486ed6e22ec0984770f39b8e2f770a5..19953194c21567bd4006710fbaa3e6fafc0ac6a4 100644 (file)
@@ -1894,6 +1894,39 @@ rspamd_random_hex (guchar *buf, guint64 len)
        }
 }
 
+gint
+rspamd_shmem_mkstemp (gchar *pattern)
+{
+       gint fd = -1;
+       gchar *nbuf, *xpos;
+       gsize blen;
+
+       xpos = strchr (pattern, 'X');
+
+       if (xpos == NULL) {
+               errno = EINVAL;
+               return -1;
+       }
+
+       blen = strlen (pattern);
+       nbuf = g_malloc (blen + 1);
+       rspamd_strlcpy (nbuf, pattern, blen + 1);
+       xpos = nbuf + (xpos - pattern);
+
+       for (;;) {
+               rspamd_random_hex (xpos, blen - (xpos - nbuf));
+
+               fd = shm_open (nbuf, O_RDWR | O_EXCL | O_CREAT, 0600);
+
+               if (fd != -1) {
+                       rspamd_strlcpy (pattern, nbuf, blen + 1);
+               }
+       }
+
+       g_free (nbuf);
+
+       return fd;
+}
 
 void
 rspamd_ptr_array_free_hard (gpointer p)
index 5c0e82a0d49d9d2a8ddd3f298318c5b100db83b9..0c293ccbea0f9f582f7971a179f8f1ef735b1297 100644 (file)
@@ -411,6 +411,13 @@ guint64 rspamd_hash_seed (void);
  */
 void rspamd_random_hex (guchar *buf, guint64 len);
 
+/**
+ * Returns
+ * @param pattern pattern to create (should end with some number of X symbols), modified by this function
+ * @return
+ */
+gint rspamd_shmem_mkstemp (gchar *pattern);
+
 /**
  * Return jittered time value
  */