This patchset comprises a number of cleanups for the cifs upcall
authorJeremy Allison <jra@samba.org>
Thu, 17 Jul 2008 00:27:05 +0000 (17:27 -0700)
committerJeremy Allison <jra@samba.org>
Thu, 17 Jul 2008 00:27:05 +0000 (17:27 -0700)
binary. The biggest change is that it renames it from cifs.spnego
to cifs.upcall since the cifs.spnego name really isn't applicable
anymore.

It also fixes a segfault when the program is run without any args
and adds a manpage. Comments and/or suggestions appreciated.

This set should apply cleanly to the 3.3 test branch.

Signed-off-by: Jeff Layton <jlayton@redhat.com>
Jeremy.
(This used to be commit c633f10d9e78327664e6bca51f66756bcf0505a6)

docs-xml/manpages-3/cifs.upcall.8.xml [new file with mode: 0644]
source3/Makefile.in
source3/client/cifs.upcall.c [moved from source3/client/cifs.spnego.c with 94% similarity]
source3/configure.in

diff --git a/docs-xml/manpages-3/cifs.upcall.8.xml b/docs-xml/manpages-3/cifs.upcall.8.xml
new file mode 100644 (file)
index 0000000..8df776b
--- /dev/null
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE refentry PUBLIC "-//Samba-Team//DTD DocBook V4.2-Based Variant V1.0//EN" "http://www.samba.org/samba/DTD/samba-doc">
+<refentry id="cifs.upcall.8">
+
+
+<refmeta>
+        <refentrytitle>cifs.upcall</refentrytitle>
+        <manvolnum>8</manvolnum>
+        <refmiscinfo class="source">Samba</refmiscinfo>
+        <refmiscinfo class="manual">System Administration tools</refmiscinfo>
+        <refmiscinfo class="version">3.2</refmiscinfo>
+</refmeta>
+
+<refnamediv>
+        <refname>cifs.upcall</refname>
+        <refpurpose>Userspace upcall helper for Common Internet File System (CIFS)</refpurpose>
+</refnamediv>
+
+<refsynopsisdiv>
+        <cmdsynopsis>
+                <command>cifs.upcall</command>
+                <arg choice="opt">-c</arg>
+                <arg choice="opt">-v</arg>
+                <arg choice="req">keyid</arg>
+        </cmdsynopsis>
+</refsynopsisdiv>
+
+
+<refsect1>
+        <title>DESCRIPTION</title>
+
+        <para>This tool is part of the <citerefentry><refentrytitle>samba</refentrytitle>
+        <manvolnum>7</manvolnum></citerefentry> suite.</para>
+
+<para>cifs.upcall is a userspace helper program for the linux CIFS client
+filesystem. There are a number of activities that the kernel cannot easily
+do itself. This program is a callout program that does these things for the
+kernel and then returns the result.</para>
+
+<para>cifs.upcall is generally intended to be run when the kernel calls
+request-key<manvolnum>8</manvolnum> for a particular key type. While it
+can be run directly from the command-line, it's not generally intended
+to be run that way.</para>
+</refsect1>
+
+<refsect1>
+       <title>OPTIONS</title>
+       <variablelist>
+               <varlistentry>
+               <term>-c</term>
+               <listitem><para>When handling a kerberos upcall, use a service principal that starts with "cifs/". The default is to use the "host/" service principal.
+               </para></listitem>
+               </varlistentry>
+
+               <varlistentry>
+               <term>-v</term>
+               <listitem><para>Print version number and exit.
+               </para></listitem>
+               </varlistentry>
+       </variablelist>
+</refsect1>
+
+<refsect1>
+       <title>CONFIGURATION FOR KEYCTL</title>
+       <para>cifs.upcall is designed to be called from the kernel via the request-key callout program. This requres that request-key be told where and how to call this program. The current cifs.upcall program handles two different key types:</para>
+
+       <variablelist>
+               <varlistentry>
+               <term>cifs.spnego</term>
+               <listitem><para>This keytype is for retrieving kerberos session keys
+               </para></listitem>
+               </varlistentry>
+
+               <varlistentry>
+               <term>cifs.resolve</term>
+               <listitem><para>This key type is for resolving hostnames into IP addresses
+               </para></listitem>
+               </varlistentry>
+       </variablelist>
+
+       <para>To make this program useful for CIFS, you'll need to set up entries for them in request-key.conf<manvolnum>5</manvolnum>. Here's an example of an entry for each key type:</para>
+<programlisting>
+#OPERATION  TYPE           D C PROGRAM ARG1 ARG2...
+#=========  =============  = = ==========================================
+create     cifs.spnego    * * /usr/local/sbin/cifs.upcall -c %k
+create      cifs.resolver  * * /usr/local/sbin/cifs.upcall %k
+</programlisting>
+<para>
+See <citerefentry><refentrytitle>request-key.conf<manvolnum>5</manvolnum></refentrytitle></citerefentry> for more info on each field.
+</para>
+</refsect1>
+
+<refsect1>
+        <title>SEE ALSO</title>
+        <para>
+       <citerefentry><refentrytitle>request-key.conf</refentrytitle>
+        <manvolnum>5</manvolnum></citerefentry>,
+       <citerefentry><refentrytitle>mount.cifs</refentrytitle>
+        <manvolnum>8</manvolnum></citerefentry>
+       </para>
+</refsect1>
+
+<refsect1>
+        <title>AUTHOR</title>
+
+       <para>Igor Mammedov wrote the cifs.upcall program.</para>
+       <para>Jeff Layton authored this manpage.</para>
+       <para>The maintainer of the Linux CIFS VFS is Steve French.</para>
+        <para>The <ulink url="mailto:linux-cifs-client@lists.samba.org">Linux
+               CIFS Mailing list</ulink> is the preferred place to ask
+               questions regarding these programs.
+       </para>
+</refsect1>
+
+</refentry>
index cd701837115600f723440b366091e19f372cc595..85837a89434c4e729c2dc9afb7e705606912c9a5 100644 (file)
@@ -178,7 +178,7 @@ PATH_FLAGS = -DSMB_PASSWD_FILE=\"$(SMB_PASSWD_FILE)\" \
 
 SBIN_PROGS = bin/smbd@EXEEXT@ bin/nmbd@EXEEXT@ @SWAT_SBIN_TARGETS@ @EXTRA_SBIN_PROGS@
 
-ROOT_SBIN_PROGS = @CIFSMOUNT_PROGS@ @CIFSSPNEGO_PROGS@
+ROOT_SBIN_PROGS = @CIFSMOUNT_PROGS@ @CIFSUPCALL_PROGS@
 
 BIN_PROGS1 = bin/smbclient@EXEEXT@ bin/net@EXEEXT@ bin/smbspool@EXEEXT@ \
        bin/testparm@EXEEXT@ bin/smbstatus@EXEEXT@ bin/smbget@EXEEXT@
@@ -878,7 +878,7 @@ CIFS_MOUNT_OBJ = client/mount.cifs.o
 
 CIFS_UMOUNT_OBJ = client/umount.cifs.o
 
-CIFS_SPNEGO_OBJ = client/cifs.spnego.o
+CIFS_UPCALL_OBJ = client/cifs.upcall.o
 
 NMBLOOKUP_OBJ = utils/nmblookup.o $(PARAM_OBJ) $(LIBNMB_OBJ) \
                $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) $(LIBSAMBA_OBJ)
@@ -1340,9 +1340,9 @@ bin/umount.cifs@EXEEXT@: $(BINARY_PREREQS) $(CIFS_UMOUNT_OBJ) @BUILD_POPT@
        @echo Linking $@
        @$(CC) $(FLAGS) -o $@ $(CIFS_UMOUNT_OBJ) $(DYNEXP) $(LDFLAGS) $(POPT_LIBS)
 
-bin/cifs.spnego@EXEEXT@: $(BINARY_PREREQS) $(CIFS_SPNEGO_OBJ) $(LIBSMBCLIENT_OBJ1) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
+bin/cifs.upcall@EXEEXT@: $(BINARY_PREREQS) $(CIFS_UPCALL_OBJ) $(LIBSMBCLIENT_OBJ1) @BUILD_POPT@ @LIBTALLOC_SHARED@ @LIBTDB_SHARED@ @LIBWBCLIENT_SHARED@
        @echo Linking $@
-       @$(CC) $(FLAGS) -o $@ $(CIFS_SPNEGO_OBJ) $(DYNEXP) $(LDFLAGS) \
+       @$(CC) $(FLAGS) -o $@ $(CIFS_UPCALL_OBJ) $(DYNEXP) $(LDFLAGS) \
                -lkeyutils $(LIBS) $(LIBSMBCLIENT_OBJ1) $(KRB5LIBS) \
                $(LDAP_LIBS) $(POPT_LIBS) $(LIBTALLOC_LIBS) $(WINBIND_LIBS) \
                $(LIBTDB_LIBS)
@@ -2449,7 +2449,7 @@ bin/rpc_open_tcp@EXEEXT@: $(BINARY_PREREQS) $(RPC_OPEN_TCP_OBJ) @LIBTALLOC_SHARE
                $(LIBS) $(LIBTALLOC_LIBS) @LIBTDB_SHARED@ $(WINBIND_LIBS) \
                $(LDAP_LIBS) $(KRB5LIBS) $(NSCD_LIBS)
 
-install:: installservers installbin @INSTALL_CIFSMOUNT@ @INSTALL_CIFSSPNEGO@ installman \
+install:: installservers installbin @INSTALL_CIFSMOUNT@ @INSTALL_CIFSUPCALL@ installman \
                installscripts installdat installmodules @SWAT_INSTALL_TARGETS@ \
                @INSTALL_PAM_MODULES@ installlibs
 
@@ -2476,9 +2476,9 @@ installcifsmount:: @CIFSMOUNT_PROGS@
        @$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(ROOTSBINDIR)
        @$(SHELL) script/installbin.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(ROOTSBINDIR) @CIFSMOUNT_PROGS@
 
-installcifsspnego:: @CIFSSPNEGO_PROGS@
+installcifsupcall:: @CIFSUPCALL_PROGS@
        @$(SHELL) $(srcdir)/script/installdirs.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(ROOTSBINDIR)
-       @$(SHELL) script/installbin.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(ROOTSBINDIR) @CIFSSPNEGO_PROGS@
+       @$(SHELL) script/installbin.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(ROOTSBINDIR) @CIFSUPCALL_PROGS@
 
 # Some symlinks are required for the 'probing' of modules.
 # This mechanism should go at some point..
@@ -2545,7 +2545,7 @@ showlayout::
        @echo "  swatdir:     $(SWATDIR)"
 
 
-uninstall:: uninstallman uninstallservers uninstallbin @UNINSTALL_CIFSMOUNT@ @UNINSTALL_CIFSSPNEGO@ uninstallscripts uninstalldat uninstallswat uninstallmodules uninstalllibs @UNINSTALL_PAM_MODULES@
+uninstall:: uninstallman uninstallservers uninstallbin @UNINSTALL_CIFSMOUNT@ @UNINSTALL_CIFSUPCALL@ uninstallscripts uninstalldat uninstallswat uninstallmodules uninstalllibs @UNINSTALL_PAM_MODULES@
 
 uninstallman::
        @$(SHELL) $(srcdir)/script/uninstallman.sh $(DESTDIR)$(MANDIR) $(srcdir) C
@@ -2559,8 +2559,8 @@ uninstallbin::
 uninstallcifsmount::
        @$(SHELL) script/uninstallbin.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(ROOTSBINDIR) @CIFSMOUNT_PROGS@
 
-uninstallcifsspnego::
-       @$(SHELL) script/uninstallbin.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(ROOTSBINDIR) @CIFSSPNEGO_PROGS@
+uninstallcifsupcall::
+       @$(SHELL) script/uninstallbin.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(ROOTSBINDIR) @CIFSUPCALL_PROGS@
 
 uninstallmodules::
        @$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS_BIN) $(DESTDIR) $(prefix) $(VFSLIBDIR) $(VFS_MODULES)
similarity index 94%
rename from source3/client/cifs.spnego.c
rename to source3/client/cifs.upcall.c
index d10d19da96ad48d05eca436b71c4f4e3c9bc0423..3860f33e3812fd9dad4ef8c433af405252876e18 100644 (file)
@@ -1,5 +1,5 @@
 /*
-* CIFS SPNEGO user-space helper.
+* CIFS user-space helper.
 * Copyright (C) Igor Mammedov (niallain@gmail.com) 2007
 *
 * Used by /sbin/request-key for handling
@@ -8,8 +8,8 @@
 * You should have keyutils installed and add following line to
 * /etc/request-key.conf file
 
-create cifs.spnego * * /usr/local/sbin/cifs.spnego [-v][-c] %k
-create cifs.resolver * * /usr/local/sbin/cifs.spnego [-v] %k
+create cifs.spnego * * /usr/local/sbin/cifs.upcall [-v][-c] %k
+create cifs.resolver * * /usr/local/sbin/cifs.upcall [-v] %k
 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
@@ -30,7 +30,7 @@ create cifs.resolver * * /usr/local/sbin/cifs.spnego [-v] %k
 #include "cifs_spnego.h"
 
 const char *CIFSSPNEGO_VERSION = "1.1";
-static const char *prog = "cifs.spnego";
+static const char *prog = "cifs.upcall";
 typedef enum _secType {
        KRB5,
        MS_KRB5
@@ -200,6 +200,13 @@ int cifs_resolver(const key_serial_t key, const char *key_descr)
        return 0;
 }
 
+void
+usage(const char *prog)
+{
+       syslog(LOG_WARNING, "Usage: %s [-c] [-v] key_serial", prog);
+       fprintf(stderr, "Usage: %s [-c] [-v] key_serial\n", prog);
+}
+
 int main(const int argc, char *const argv[])
 {
        struct cifs_spnego_msg *keydata = NULL;
@@ -215,10 +222,6 @@ int main(const int argc, char *const argv[])
        char *buf, *hostname = NULL;
 
        openlog(prog, 0, LOG_DAEMON);
-       if (argc < 1) {
-               syslog(LOG_WARNING, "Usage: %s [-c] key_serial", prog);
-               goto out;
-       }
 
        while ((c = getopt(argc, argv, "cv")) != -1) {
                switch (c) {
@@ -227,9 +230,8 @@ int main(const int argc, char *const argv[])
                        break;
                        }
                case 'v':{
-                       syslog(LOG_WARNING, "version: %s", CIFSSPNEGO_VERSION);
-                       fprintf(stderr, "version: %s", CIFSSPNEGO_VERSION);
-                       break;
+                       printf("version: %s\n", CIFSSPNEGO_VERSION);
+                       goto out;
                        }
                default:{
                        syslog(LOG_WARNING, "unknow option: %c", c);
@@ -237,6 +239,13 @@ int main(const int argc, char *const argv[])
                        }
                }
        }
+
+       /* is there a key? */
+       if (argc <= optind) {
+               usage(prog);
+               goto out;
+       }
+
        /* get key and keyring values */
        errno = 0;
        key = strtol(argv[optind], NULL, 10);
index 2ae5e35295d604d02ac860fe7e1b71fcdf4d899f..cb0e37e4a269da4304d1e3f50e9d5c57c2194209 100644 (file)
@@ -109,9 +109,9 @@ AC_SUBST(EXTRA_BIN_PROGS)
 AC_SUBST(CIFSMOUNT_PROGS)
 AC_SUBST(INSTALL_CIFSMOUNT)
 AC_SUBST(UNINSTALL_CIFSMOUNT)
-AC_SUBST(CIFSSPNEGO_PROGS)
-AC_SUBST(INSTALL_CIFSSPNEGO)
-AC_SUBST(UNINSTALL_CIFSSPNEGO)
+AC_SUBST(CIFSUPCALL_PROGS)
+AC_SUBST(INSTALL_CIFSUPCALL)
+AC_SUBST(UNINSTALL_CIFSUPCALL)
 AC_SUBST(EXTRA_SBIN_PROGS)
 AC_SUBST(EXTRA_ALL_TARGETS)
 AC_SUBST(CONFIG_LIBS)
@@ -4035,14 +4035,14 @@ AC_ARG_WITH(cifsmount,
 )
 
 #################################################
-# check for cifs.spnego support
+# check for cifs.upcall support
 AC_CHECK_HEADERS([keyutils.h], [HAVE_KEYUTILS_H=1], [HAVE_KEYUTILS_H=0])
-CIFSSPNEGO_PROGS=""
-INSTALL_CIFSSPNEGO=""
-UNINSTALL_CIFSSPNEGO=""
-AC_MSG_CHECKING(whether to build cifs.spnego)
-AC_ARG_WITH(cifsspnego,
-[AS_HELP_STRING([--with-cifsspnego], [Include cifs.spnego (Linux only) support (default=no)])],
+CIFSUPCALL_PROGS=""
+INSTALL_CIFSUPCALL=""
+UNINSTALL_CIFSUPCALL=""
+AC_MSG_CHECKING(whether to build cifs.upcall)
+AC_ARG_WITH(cifsupcall,
+[AS_HELP_STRING([--with-cifsupcall], [Include cifs.upcall (Linux only) support (default=no)])],
 [ case "$withval" in
   no)
        AC_MSG_RESULT(no)
@@ -4051,15 +4051,15 @@ AC_ARG_WITH(cifsspnego,
        case "$host_os" in
        *linux*)
                if test x"$use_ads" != x"yes"; then
-                       AC_MSG_ERROR(ADS support should be enabled for building cifs.spnego)
+                       AC_MSG_ERROR(ADS support should be enabled for building cifs.upcall)
                elif test x"$HAVE_KEYUTILS_H" != "x1"; then
-                       AC_MSG_ERROR(keyutils package is required for cifs.spnego)
+                       AC_MSG_ERROR(keyutils package is required for cifs.upcall)
                else
                        AC_MSG_RESULT(yes)
-                       AC_DEFINE(WITH_CIFSSPNEGO,1,[whether to build cifs.spnego])
-                       CIFSSPNEGO_PROGS="bin/cifs.spnego"
-                       INSTALL_CIFSSPNEGO="installcifsspnego"
-                       UNINSTALL_CIFSSPNEGO="uninstallcifsspnego"
+                       AC_DEFINE(WITH_CIFSUPCALL,1,[whether to build cifs.upcall])
+                       CIFSUPCALL_PROGS="bin/cifs.upcall"
+                       INSTALL_CIFSUPCALL="installcifsupcall"
+                       UNINSTALL_CIFSUPCALL="uninstallcifsupcall"
                fi
                ;;
        *)