push username, homedir and tmpdir in lua too.
[apps/madmutt.git] / lib-sys / unix.c
index f2141c0..38389b2 100644 (file)
@@ -8,27 +8,19 @@
  * please see the file GPL in the top level source directory.
  */
 
-#include <errno.h>
-#include <stdlib.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include <lib-lib/macros.h>
-#include <lib-lib/mem.h>
-#include <lib-lib/str.h>
+#include <lib-lib/lib-lib.h>
 
 #include "unix.h"
 #include "mutt_signal.h"
 
 #include <imap/imap.h> /* for imap_wait_keepalive EEEEK */
 
-
 /* Extract the real name from /etc/passwd's GECOS field.
  * When set, honor the regular expression in rx,
  * otherwise assume that the GECOS field is a comma-separated list.
  * Replace "&" by a capitalized version of the user's login name.
  */
-ssize_t mutt_gecos_name(char *dst, ssize_t n, struct passwd *pw, rx_t *rx)
+ssize_t mutt_gecos_name(char *dst, ssize_t n, struct passwd *pw, regex_t *rx)
 {
     const char *p, *end;
     ssize_t len;
@@ -42,7 +34,7 @@ ssize_t mutt_gecos_name(char *dst, ssize_t n, struct passwd *pw, rx_t *rx)
     if (rx) {
         regmatch_t pat_match[1];
 
-        if (regexec(rx->rx, pw->pw_gecos, 1, pat_match, 0)) {
+        if (regexec(rx, pw->pw_gecos, 1, pat_match, 0)) {
             return 0;
         }
 
@@ -156,3 +148,41 @@ int _mutt_system(const char *cmd, int flags)
 
     return (pid > 0 && WIFEXITED(rc)) ? WEXITSTATUS(rc) : -1;
 }
+
+int getdnsdomainname(char *s, ssize_t n)
+{
+    char tmp[1024];
+    FILE *f;
+
+    if ((f = fopen("/etc/resolv.conf", "r")) == NULL)
+        return -1;
+
+    while (fgets(tmp, sizeof(tmp), f)) {
+        const char *p = skipspaces(tmp);
+
+        if (m_strncmp("domain", p, 6) && m_strncmp("search", p, 6))
+            continue;
+
+        p += 6;
+
+        while (*p) {
+            int trailing_dot;
+            const char *q;
+
+            p = skipspaces(p);
+            q = m_strnextsp(p);
+
+            trailing_dot = q[-1] == '.';
+            if (!trailing_dot || q > p + 1) {
+                m_strncpy(s, n, p, q - trailing_dot - p);
+                m_fclose(&f);
+                return 0;
+            }
+
+            p = q;
+        }
+    }
+
+    m_fclose(&f);
+    return -1;
+}