]> git.decadent.org.uk Git - nfs-utils.git/blobdiff - utils/exportfs/exportfs.c
nfs-utils: Fix source code character encoding
[nfs-utils.git] / utils / exportfs / exportfs.c
index 93bad32241fae7d5d0c4f7276e75f3290da5ffdf..b78957f249f44ae6c2226984e241ed6a2eb0fded 100644 (file)
@@ -26,6 +26,7 @@
 #include <netdb.h>
 #include <errno.h>
 
+#include "sockaddr.h"
 #include "misc.h"
 #include "nfslib.h"
 #include "exportfs.h"
@@ -37,7 +38,7 @@ static void   unexportfs(char *arg, int verbose);
 static void    exports_update(int verbose);
 static void    dump(int verbose);
 static void    error(nfs_export *exp, int err);
-static void    usage(void);
+static void    usage(const char *progname);
 static void    validate_export(nfs_export *exp);
 static int     matchhostname(const char *hostname1, const char *hostname2);
 
@@ -45,6 +46,7 @@ int
 main(int argc, char **argv)
 {
        char    *options = NULL;
+       char    *progname = NULL;
        int     f_export = 1;
        int     f_all = 0;
        int     f_verbose = 0;
@@ -54,7 +56,14 @@ main(int argc, char **argv)
        int     new_cache = 0;
        int     force_flush = 0;
 
-       xlog_open("exportfs");
+       if ((progname = strrchr(argv[0], '/')) != NULL)
+               progname++;
+       else
+               progname = argv[0];
+
+       xlog_open(progname);
+       xlog_stderr(1);
+       xlog_syslog(0);
 
        export_errno = 0;
 
@@ -83,21 +92,21 @@ main(int argc, char **argv)
                        force_flush = 1;
                        break;
                default:
-                       usage();
+                       usage(progname);
                        break;
                }
        }
 
        if (optind != argc && f_all) {
-               fprintf(stderr,"exportfs: extra arguments are not permitted with -a or -r.\n");
+               xlog(L_ERROR, "extra arguments are not permitted with -a or -r");
                return 1;
        }
        if (f_ignore && (f_all || ! f_export)) {
-               fprintf(stderr,"exportfs: -i not meaningful with -a, -r or -u.\n");
+               xlog(L_ERROR, "-i not meaningful with -a, -r or -u");
                return 1;
        }
        if (f_reexport && ! f_export) {
-               fprintf(stderr, "exportfs: -r and -u are incompatible.\n");
+               xlog(L_ERROR, "-r and -u are incompatible");
                return 1;
        }
        new_cache = check_new_cache();
@@ -106,8 +115,10 @@ main(int argc, char **argv)
                        if (new_cache)
                                cache_flush(1);
                        else {
-                               fprintf(stderr, "exportfs: -f: only available with new cache controls: mount /proc/fs/nfsd first\n");
-                               exit(1);
+                               xlog(L_ERROR, "-f is available only "
+                                       "with new cache controls. "
+                                       "Mount /proc/fs/nfsd first");
+                               return 1;
                        }
                        return 0;
                } else {
@@ -245,7 +256,7 @@ exportfs(char *arg, char *options, int verbose)
                *path++ = '\0';
 
        if (!path || *path != '/') {
-               fprintf(stderr, "Invalid exporting option: %s\n", arg);
+               xlog(L_ERROR, "Invalid exporting option: %s", arg);
                return;
        }
 
@@ -291,8 +302,7 @@ unexportfs(char *arg, int verbose)
                *path++ = '\0';
 
        if (!path || *path != '/') {
-               fprintf(stderr, "Invalid unexporting option: %s\n",
-                       arg);
+               xlog(L_ERROR, "Invalid unexporting option: %s", arg);
                return;
        }
 
@@ -387,14 +397,12 @@ validate_export(nfs_export *exp)
        int fs_has_fsid = 0;
 
        if (stat(path, &stb) < 0) {
-               fprintf(stderr, "exportfs: Warning: %s does not exist\n",
-                       path);
+               xlog(L_ERROR, "Failed to stat %s: %m \n", path);
                return;
        }
        if (!S_ISDIR(stb.st_mode) && !S_ISREG(stb.st_mode)) {
-               fprintf(stderr, "exportfs: Warning: %s is neither "
-                       "a directory nor a file.\n"
-                       "     remote access will fail\n", path);
+               xlog(L_ERROR, "%s is neither a directory nor a file. "
+                       "Remote access will fail", path);
                return;
        }
        if (!can_test())
@@ -407,19 +415,14 @@ validate_export(nfs_export *exp)
        if ((exp->m_export.e_flags & NFSEXP_FSID) || exp->m_export.e_uuid ||
            fs_has_fsid) {
                if ( !test_export(path, 1)) {
-                       fprintf(stderr, "exportfs: Warning: %s does not "
-                               "support NFS export.\n",
-                               path);
+                       xlog(L_ERROR, "%s does not support NFS export", path);
                        return;
                }
        } else if ( ! test_export(path, 0)) {
                if (test_export(path, 1))
-                       fprintf(stderr, "exportfs: Warning: %s requires fsid= "
-                               "for NFS export\n", path);
+                       xlog(L_ERROR, "%s requires fsid= for NFS export", path);
                else
-                       fprintf(stderr, "exportfs: Warning: %s does not "
-                               "support NFS export.\n",
-                               path);
+                       xlog(L_ERROR, "%s does not support NFS export", path);
                return;
 
        }
@@ -441,26 +444,6 @@ is_hostname(const char *sp)
        return true;
 }
 
-static _Bool
-compare_sockaddrs4(const struct sockaddr *sa1, const struct sockaddr *sa2)
-{
-       const struct sockaddr_in *sin1 = (const struct sockaddr_in *)sa1;
-       const struct sockaddr_in *sin2 = (const struct sockaddr_in *)sa2;
-       return sin1->sin_addr.s_addr == sin2->sin_addr.s_addr;
-}
-
-static _Bool
-compare_sockaddrs(const struct sockaddr *sa1, const struct sockaddr *sa2)
-{
-       if (sa1->sa_family == sa2->sa_family)
-               switch (sa1->sa_family) {
-               case AF_INET:
-                       return compare_sockaddrs4(sa1, sa2);
-               }
-
-       return false;
-}
-
 static int
 matchhostname(const char *hostname1, const char *hostname2)
 {
@@ -491,7 +474,7 @@ matchhostname(const char *hostname1, const char *hostname2)
 
        for (ai1 = results1; ai1 != NULL; ai1 = ai1->ai_next)
                for (ai2 = results2; ai2 != NULL; ai2 = ai2->ai_next)
-                       if (compare_sockaddrs(ai1->ai_addr, ai2->ai_addr)) {
+                       if (nfs_compare_sockaddr(ai1->ai_addr, ai2->ai_addr)) {
                                result = 1;
                                break;
                        }
@@ -602,13 +585,13 @@ dump(int verbose)
 static void
 error(nfs_export *exp, int err)
 {
-       fprintf(stderr, "%s:%s: %s\n", exp->m_client->m_hostname, 
+       xlog(L_ERROR, "%s:%s: %s\n", exp->m_client->m_hostname,
                exp->m_export.e_path, strerror(err));
 }
 
 static void
-usage(void)
+usage(const char *progname)
 {
-       fprintf(stderr, "usage: exportfs [-aruv] [host:/path]\n");
+       fprintf(stderr, "usage: %s [-aruv] [host:/path]\n", progname);
        exit(1);
 }