- updated to 5.0.8 auto/th/autofs-5.0.8-1
authorJan Rękorajski <baggins@pld-linux.org>
Wed, 4 Dec 2013 11:16:46 +0000 (12:16 +0100)
committerJan Rękorajski <baggins@pld-linux.org>
Wed, 4 Dec 2013 11:16:46 +0000 (12:16 +0100)
- added patches from ftp://ftp.kernel.org/pub/linux/daemons/autofs/v5/patches-5.0.9/
- enable LDAP support (heimdal issues fixed upstream)

autofs-5.0.8-allow-with-systemd-to-take-a-path-arg.patch [new file with mode: 0644]
autofs-5.0.8-fix-WITH_LIBTIRPC-function-name.patch [new file with mode: 0644]
autofs-5.0.8-fix-allow-with-systemd-to-take-a-path-arg.patch [new file with mode: 0644]
autofs-5.0.8-fix-ipv6-libtirpc-getport.patch [new file with mode: 0644]
autofs-5.0.8-fix-master-map-type-check.patch [new file with mode: 0644]
autofs-5.0.8-fix-task-manager-not-getting-signaled.patch [new file with mode: 0644]
autofs-5.0.8-fix-undefined-authtype_requires_creds-err-if-ldap-en.patch [new file with mode: 0644]
autofs-makefile.patch
autofs.spec

diff --git a/autofs-5.0.8-allow-with-systemd-to-take-a-path-arg.patch b/autofs-5.0.8-allow-with-systemd-to-take-a-path-arg.patch
new file mode 100644 (file)
index 0000000..c08799c
--- /dev/null
@@ -0,0 +1,62 @@
+autofs-5.0.8 - allow --with-systemd to take a path arg
+
+From: Joe MacDonald <joe@deserted.net>
+
+If building for a cross-compile environment with systemd it is convenient
+to be able to specify a systemd path for the target that may not be the
+same as that on the host.
+
+I encountered a problem while working with autofs in a cross-compile
+environment where the host and target have either differing systemd paths
+or where one may not have systemd support at all.  The common solution
+I've seen in other projects is to have a --with-systemddir=[path] option,
+but I thought it'd be simpler to add an optional path argument to the
+extant '--with-systemd' configure parameter and leave the default =y+probe
+for path logic in place.
+
+Signed-off-by: Joe MacDonald <joe@deserted.net>
+---
+ CHANGELOG  |    1 +
+ aclocal.m4 |   10 ++++++++--
+ 2 files changed, 9 insertions(+), 2 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index a01393c..565153d 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -3,6 +3,7 @@
+ - fix undefined authtype_requires_creds err if ldap enabled but without sasl.
+ - fix master map type check.
+ - fix task manager not getting signaled.
++- allow --with-systemd to take a path arg.
+ 17/10/2013 autofs-5.0.8
+ =======================
+diff --git a/aclocal.m4 b/aclocal.m4
+index 3e6f223..105e3e9 100644
+--- a/aclocal.m4
++++ b/aclocal.m4
+@@ -229,8 +229,10 @@ dnl Check the location of the systemd unit files directory
+ dnl --------------------------------------------------------------------------
+ AC_DEFUN([AF_WITH_SYSTEMD],
+ [AC_ARG_WITH(systemd,
+-[  --with-systemd         install systemd unit file if systemd unit directory
+-                        is found on system],
++[  --with-systemd@<:@=systemddir@:>@  install systemd unit file.  If 'yes'
++                        probe the system for unit directory.
++                        If a path is specified, assume that
++                        is a valid install path.],
+ [if test "$withval" = yes; then
+   if test -z "$systemddir"; then
+     AC_MSG_CHECKING([location of the systemd unit files directory])
+@@ -247,6 +249,10 @@ AC_DEFUN([AF_WITH_SYSTEMD],
+   else
+     AC_MSG_RESULT(not found)
+   fi
++else
++ if test "$withval" != no; then
++  systemddir=$withval
++ fi
+ fi])
+ ])
diff --git a/autofs-5.0.8-fix-WITH_LIBTIRPC-function-name.patch b/autofs-5.0.8-fix-WITH_LIBTIRPC-function-name.patch
new file mode 100644 (file)
index 0000000..d62b028
--- /dev/null
@@ -0,0 +1,49 @@
+autofs-5.0.8 - fix WITH_LIBTIRPC function name
+
+From: Ian Kent <ikent@redhat.com>
+
+autoconf function names AM_<name> are reserved so don't use them.
+---
+ CHANGELOG    |    1 +
+ aclocal.m4   |    2 +-
+ configure.in |    2 +-
+ 3 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 565153d..68db340 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -4,6 +4,7 @@
+ - fix master map type check.
+ - fix task manager not getting signaled.
+ - allow --with-systemd to take a path arg.
++- fix WITH_LIBTIRPC function name.
+ 17/10/2013 autofs-5.0.8
+ =======================
+diff --git a/aclocal.m4 b/aclocal.m4
+index 105e3e9..2115204 100644
+--- a/aclocal.m4
++++ b/aclocal.m4
+@@ -441,7 +441,7 @@ CFLAGS="$af_check_libtirpc_save_cflags"
+ LDFLAGS="$af_check_libtirpc_save_ldflags"
+ ])
+-AC_DEFUN([AM_WITH_LIBTIRPC],
++AC_DEFUN([AF_WITH_LIBTIRPC],
+ [AC_MSG_CHECKING([if libtirpc is requested and available])
+ AC_ARG_WITH(libtirpc,
+ [  --with-libtirpc         use libtirpc if available],
+diff --git a/configure.in b/configure.in
+index 5f29163..1eeb8dc 100644
+--- a/configure.in
++++ b/configure.in
+@@ -124,7 +124,7 @@ AC_SUBST(flagdir)
+ #
+ # Use libtirpc
+ #
+-AM_WITH_LIBTIRPC()
++AF_WITH_LIBTIRPC()
+ AC_SUBST(TIRPCLIB)
+ #
diff --git a/autofs-5.0.8-fix-allow-with-systemd-to-take-a-path-arg.patch b/autofs-5.0.8-fix-allow-with-systemd-to-take-a-path-arg.patch
new file mode 100644 (file)
index 0000000..d49cb59
--- /dev/null
@@ -0,0 +1,37 @@
+autofs-5.0.8 - fix allow with systemd to take a path arg
+
+From: Ian Kent <ikent@redhat.com>
+
+And update configure ..
+---
+ configure |   10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/configure b/configure
+index 2c2e312..4e1743d 100755
+--- a/configure
++++ b/configure
+@@ -1372,8 +1372,10 @@ Optional Packages:
+   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+   --with-path=PATH      look in PATH for binaries needed by the automounter
+-  --with-systemd         install systemd unit file if systemd unit directory
+-                        is found on system
++  --with-systemd[=systemddir]  install systemd unit file.  If 'yes'
++                        probe the system for unit directory.
++                        If a path is specified, assume that
++                        is a valid install path.
+   --with-confdir=DIR    use DIR for autofs configuration files
+   --with-mapdir=PATH    look in PATH for mount maps used by the automounter
+   --with-fifodir=PATH    use PATH as the directory for fifos used by the automounter
+@@ -2260,6 +2262,10 @@ $as_echo "$systemddir" >&6; }
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
+ $as_echo "not found" >&6; }
+   fi
++else
++ if test "$withval" != no; then
++  systemddir=$withval
++ fi
+ fi
+ fi
diff --git a/autofs-5.0.8-fix-ipv6-libtirpc-getport.patch b/autofs-5.0.8-fix-ipv6-libtirpc-getport.patch
new file mode 100644 (file)
index 0000000..eee6c5c
--- /dev/null
@@ -0,0 +1,345 @@
+autofs-5.0.8 - fix ipv6 libtirpc getport
+
+From: Ian Kent <ikent@redhat.com>
+
+The method that was being used to obtain a service port number
+when using libtirpc was wrong.
+---
+ CHANGELOG      |    1 
+ lib/rpc_subs.c |  283 +++++++++++++++++++++++++++++++++++++++++++++++++++++---
+ 2 files changed, 267 insertions(+), 17 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 68db340..9c87373 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -5,6 +5,7 @@
+ - fix task manager not getting signaled.
+ - allow --with-systemd to take a path arg.
+ - fix WITH_LIBTIRPC function name.
++- fix ipv6 libtirpc getport.
+ 17/10/2013 autofs-5.0.8
+ =======================
+diff --git a/lib/rpc_subs.c b/lib/rpc_subs.c
+index 46b3e8d..2365b6e 100644
+--- a/lib/rpc_subs.c
++++ b/lib/rpc_subs.c
+@@ -234,6 +234,28 @@ static int rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, i
+       return 0;
+ }
++static int rpc_getport(struct conn_info *info,
++                     struct pmap *parms, CLIENT *client)
++{
++      enum clnt_stat status;
++
++      /*
++       * Check to see if server is up otherwise a getport will take
++       * forever to timeout.
++       */
++      status = clnt_call(client, PMAPPROC_NULL,
++                       (xdrproc_t) xdr_void, 0, (xdrproc_t) xdr_void, 0,
++                       info->timeout);
++
++      if (status == RPC_SUCCESS) {
++              status = clnt_call(client, PMAPPROC_GETPORT,
++                               (xdrproc_t) xdr_pmap, (caddr_t) parms,
++                               (xdrproc_t) xdr_u_short, (caddr_t) port,
++                               info->timeout);
++      }
++
++      return status;
++}
+ #else
+ static int rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, int *fd, CLIENT **client)
+ {
+@@ -267,9 +289,6 @@ static int rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, i
+               laddr = (struct sockaddr *) &in4_laddr;
+               in4_raddr->sin_port = htons(info->port);
+               slen = sizeof(struct sockaddr_in);
+-              /* Use rpcbind v2 for AF_INET */
+-              if (info->program == rpcb_prog)
+-                      info->version = PMAPVERS;
+       } else if (addr->sa_family == AF_INET6) {
+               struct sockaddr_in6 *in6_raddr = (struct sockaddr_in6 *) addr;
+               in6_laddr.sin6_family = AF_INET6;
+@@ -324,6 +343,244 @@ static int rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, i
+       return 0;
+ }
++
++/*
++ * Thankfully nfs-utils had already dealt with this.
++ * Thanks to Chuck Lever for his nfs-utils patch series, much of
++ * which is used here.
++ */
++static pthread_mutex_t proto_mutex = PTHREAD_MUTEX_INITIALIZER;
++
++static enum clnt_stat rpc_get_netid(const sa_family_t family,
++                                  const int protocol, char **netid)
++{
++      char *nc_protofmly, *nc_proto, *nc_netid;
++      struct netconfig *nconf;
++      struct protoent *proto;
++      void *handle;
++
++      switch (family) {
++      case AF_LOCAL:
++      case AF_INET:
++              nc_protofmly = NC_INET;
++              break;
++      case AF_INET6:
++              nc_protofmly = NC_INET6;
++              break;
++      default:
++              return RPC_UNKNOWNPROTO;
++        }
++
++      pthread_mutex_lock(&proto_mutex);
++      proto = getprotobynumber(protocol);
++      if (!proto) {
++              pthread_mutex_unlock(&proto_mutex);
++              return RPC_UNKNOWNPROTO;
++      }
++      nc_proto = strdup(proto->p_name);
++      pthread_mutex_unlock(&proto_mutex);
++      if (!nc_proto)
++              return RPC_SYSTEMERROR;
++
++      handle = setnetconfig();
++      while ((nconf = getnetconfig(handle)) != NULL) {
++              if (nconf->nc_protofmly != NULL &&
++                  strcmp(nconf->nc_protofmly, nc_protofmly) != 0)
++                      continue;
++              if (nconf->nc_proto != NULL &&
++                  strcmp(nconf->nc_proto, nc_proto) != 0)
++                      continue;
++
++              nc_netid = strdup(nconf->nc_netid);
++              if (!nc_netid) {
++                      free(nc_proto);
++                      return RPC_SYSTEMERROR;
++              }
++
++              *netid = nc_netid;
++      }
++      endnetconfig(handle);
++      free(nc_proto);
++
++      return RPC_SUCCESS;
++}
++
++static char *rpc_sockaddr2universal(const struct sockaddr *addr)
++{
++      const struct sockaddr_in6 *sin6 = (const struct sockaddr_in6 *) addr;
++      const struct sockaddr_un *sun = (const struct sockaddr_un *) addr;
++      const struct sockaddr_in *sin = (const struct sockaddr_in *) addr;
++      char buf[INET6_ADDRSTRLEN + 8 /* for port information */];
++      uint16_t port;
++      size_t count;
++      char *result;
++      int len;
++
++      switch (addr->sa_family) {
++      case AF_LOCAL:
++              return strndup(sun->sun_path, sizeof(sun->sun_path));
++      case AF_INET:
++              if (inet_ntop(AF_INET, (const void *)&sin->sin_addr.s_addr,
++                                      buf, (socklen_t)sizeof(buf)) == NULL)
++                      goto out_err;
++              port = ntohs(sin->sin_port);
++              break;
++      case AF_INET6:
++              if (inet_ntop(AF_INET6, (const void *)&sin6->sin6_addr,
++                                      buf, (socklen_t)sizeof(buf)) == NULL)
++                      goto out_err;
++              port = ntohs(sin6->sin6_port);
++              break;
++      default:
++              goto out_err;
++      }
++
++      count = sizeof(buf) - strlen(buf);
++      len = snprintf(buf + strlen(buf), count, ".%u.%u",
++                      (unsigned)(port >> 8), (unsigned)(port & 0xff));
++      /* before glibc 2.0.6, snprintf(3) could return -1 */
++      if (len < 0 || (size_t)len > count)
++              goto out_err;
++
++      result = strdup(buf);
++      return result;
++
++out_err:
++        return NULL;
++}
++
++static int rpc_universal2port(const char *uaddr)
++{
++      char *addrstr;
++      char *p, *endptr;
++      unsigned long portlo, porthi;
++      int port = -1;
++
++      addrstr = strdup(uaddr);
++      if (!addrstr)
++              return -1;
++
++      p = strrchr(addrstr, '.');
++      if (!p)
++              goto out;
++
++      portlo = strtoul(p + 1, &endptr, 10);
++      if (*endptr != '\0' || portlo > 255)
++              goto out;
++      *p = '\0';
++
++        p = strrchr(addrstr, '.');
++        if (!p)
++                goto out;
++
++        porthi = strtoul(p + 1, &endptr, 10);
++        if (*endptr != '\0' || porthi > 255)
++                goto out;
++        *p = '\0';
++
++        port = (porthi << 8) | portlo;
++
++out:
++      free(addrstr);
++      return port;
++}
++
++static enum clnt_stat rpc_rpcb_getport(CLIENT *client,
++                                     struct rpcb *parms,
++                                     struct timeval timeout,
++                                     unsigned short *port)
++{
++      rpcvers_t rpcb_version;
++      struct rpc_err rpcerr;
++      int s_port = 0;
++
++      for (rpcb_version = RPCBVERS_4;
++           rpcb_version >= RPCBVERS_3;
++           rpcb_version--) {
++              enum clnt_stat status;
++              char *uaddr = NULL;
++
++              CLNT_CONTROL(client, CLSET_VERS, (void *) &rpcb_version);
++              status = CLNT_CALL(client, (rpcproc_t) RPCBPROC_GETADDR,
++                                (xdrproc_t) xdr_rpcb, (void *) parms,
++                                (xdrproc_t) xdr_wrapstring, (void *) &uaddr,
++                                timeout);
++
++              switch (status) {
++              case RPC_SUCCESS:
++                      if ((uaddr == NULL) || (uaddr[0] == '\0'))
++                              return RPC_PROGNOTREGISTERED;
++
++                      s_port = rpc_universal2port(uaddr);
++                      xdr_free((xdrproc_t) xdr_wrapstring, (char *) &uaddr);
++                      if (s_port == -1) {
++                              return RPC_N2AXLATEFAILURE;
++                      }
++                      *port = s_port;
++                      return RPC_SUCCESS;
++
++              case RPC_PROGVERSMISMATCH:
++                      clnt_geterr(client, &rpcerr);
++                      if (rpcerr.re_vers.low > RPCBVERS4)
++                              return status;
++                      continue;
++              case RPC_PROCUNAVAIL:
++              case RPC_PROGUNAVAIL:
++                      continue;
++              default:
++                        /* Most likely RPC_TIMEDOUT or RPC_CANTRECV */
++                      return status;
++              }
++      }
++
++        if (s_port == 0)
++              return RPC_PROGNOTREGISTERED;
++
++        return RPC_PROCUNAVAIL;
++}
++
++static enum clnt_stat rpc_getport(struct conn_info *info,
++                                struct pmap *parms, CLIENT *client,
++                                unsigned short *port)
++{
++      enum clnt_stat status;
++      struct sockaddr *paddr, addr;
++      struct rpcb rpcb_parms;
++      char *netid, *raddr;
++
++      if (info->addr)
++              paddr = info->addr;
++      else {
++              if (!clnt_control(client, CLGET_SERVER_ADDR, (char *) &addr))
++                      return RPC_UNKNOWNADDR;
++              paddr = &addr;
++      }
++
++      netid = NULL;
++      status = rpc_get_netid(paddr->sa_family, info->proto, &netid);
++      if (status != RPC_SUCCESS)
++              return status;
++
++      raddr = rpc_sockaddr2universal(paddr);
++      if (!raddr) {
++              free(netid);
++              return RPC_UNKNOWNADDR;
++      }
++
++      memset(&rpcb_parms, 0, sizeof(rpcb_parms));
++      rpcb_parms.r_prog   = parms->pm_prog;
++      rpcb_parms.r_vers   = parms->pm_vers;
++      rpcb_parms.r_netid  = netid;
++      rpcb_parms.r_addr   = raddr;
++      rpcb_parms.r_owner  = "";
++
++      status = rpc_rpcb_getport(client, &rpcb_parms, info->timeout, port);
++
++      free(netid);
++      free(raddr);
++
++      return status;
++}
+ #endif
+ #if defined(HAVE_GETRPCBYNAME) || defined(HAVE_GETSERVBYNAME)
+@@ -647,20 +904,7 @@ int rpc_portmap_getport(struct conn_info *info,
+                       return ret;
+       }
+-      /*
+-       * Check to see if server is up otherwise a getport will take
+-       * forever to timeout.
+-       */
+-      status = clnt_call(client, PMAPPROC_NULL,
+-                       (xdrproc_t) xdr_void, 0, (xdrproc_t) xdr_void, 0,
+-                       pmap_info.timeout);
+-
+-      if (status == RPC_SUCCESS) {
+-              status = clnt_call(client, PMAPPROC_GETPORT,
+-                               (xdrproc_t) xdr_pmap, (caddr_t) parms,
+-                               (xdrproc_t) xdr_u_short, (caddr_t) port,
+-                               pmap_info.timeout);
+-      }
++      status = rpc_getport(&pmap_info, parms, client, port);
+       if (!info->client) {
+               /*
+@@ -867,6 +1111,11 @@ static int rpc_get_exports_proto(struct conn_info *info, exports *exp)
+       clnt_control(client, CLSET_RETRY_TIMEOUT, (char *) &info->timeout);
+       client->cl_auth = authunix_create_default();
++      if (client->cl_auth == NULL) {
++              error(LOGOPT_ANY, "auth create failed");
++              clnt_destroy(client);
++              return 0;
++      }
+       vers_entry = 0;
+       while (1) {
diff --git a/autofs-5.0.8-fix-master-map-type-check.patch b/autofs-5.0.8-fix-master-map-type-check.patch
new file mode 100644 (file)
index 0000000..5d96325
--- /dev/null
@@ -0,0 +1,58 @@
+autofs-5.0.8 - fix master map type check
+
+From: Ian Kent <ikent@redhat.com>
+
+Map type has format <type>[,<format>] but the master map type check
+for old style map syntax doesn't allow for <format>.
+---
+ CHANGELOG       |    1 +
+ daemon/lookup.c |   24 ++++++++++++++++--------
+ 2 files changed, 17 insertions(+), 8 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index a45ca6a..fb2f2d6 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -1,6 +1,7 @@
+ ??/??/20?? autofs-5.0.9
+ =======================
+ - fix undefined authtype_requires_creds err if ldap enabled but without sasl.
++- fix master map type check.
+ 17/10/2013 autofs-5.0.8
+ =======================
+diff --git a/daemon/lookup.c b/daemon/lookup.c
+index e3d9536..7fea942 100644
+--- a/daemon/lookup.c
++++ b/daemon/lookup.c
+@@ -171,14 +171,22 @@ int lookup_nss_read_master(struct master *master, time_t age)
+                       char source[10];
+                       memset(source, 0, 10);
+-                      if (!strncmp(name, "file:", 5) ||
+-                          !strncmp(name, "yp:", 3) ||
+-                          !strncmp(name, "nis:", 4) ||
+-                          !strncmp(name, "nisplus:", 8) ||
+-                          !strncmp(name, "ldap:", 5) ||
+-                          !strncmp(name, "ldaps:", 6) ||
+-                          !strncmp(name, "sss:", 4) ||
+-                          !strncmp(name, "dir:", 4)) {
++                      if ((!strncmp(name, "file", 4) &&
++                               (name[4] == ',' || name[4] == ':')) ||
++                          (!strncmp(name, "yp", 3) &&
++                               (name[3] == ',' || name[3] == ':')) ||
++                          (!strncmp(name, "nis", 3) &&
++                               (name[3] == ',' || name[3] == ':')) ||
++                          (!strncmp(name, "nisplus", 7) &&
++                               (name[7] == ',' || name[7] == ':')) ||
++                          (!strncmp(name, "ldap", 4) &&
++                               (name[4] == ',' || name[4] == ':')) ||
++                          (!strncmp(name, "ldaps", 5) &&
++                               (name[5] == ',' || name[5] == ':')) ||
++                          (!strncmp(name, "sss", 3) ||
++                               (name[3] == ',' || name[3] == ':')) ||
++                          (!strncmp(name, "dir", 3) &&
++                               (name[3] == ',' || name[3] == ':'))) {
+                               strncpy(source, name, tmp - name);
+                               /*
diff --git a/autofs-5.0.8-fix-task-manager-not-getting-signaled.patch b/autofs-5.0.8-fix-task-manager-not-getting-signaled.patch
new file mode 100644 (file)
index 0000000..d189820
--- /dev/null
@@ -0,0 +1,47 @@
+autofs-5.0.8 - fix task manager not getting signaled
+
+From: Ian Kent <ikent@redhat.com>
+
+If a task is added and the task list isn't empty and in progress
+tasks depend on the new task completion the task manager doesn't
+get signaled.
+---
+ CHANGELOG      |    1 +
+ daemon/state.c |   10 +++++-----
+ 2 files changed, 6 insertions(+), 5 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index fb2f2d6..a01393c 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -2,6 +2,7 @@
+ =======================
+ - fix undefined authtype_requires_creds err if ldap enabled but without sasl.
+ - fix master map type check.
++- fix task manager not getting signaled.
+ 17/10/2013 autofs-5.0.8
+ =======================
+diff --git a/daemon/state.c b/daemon/state.c
+index 8d81788..3174a9c 100644
+--- a/daemon/state.c
++++ b/daemon/state.c
+@@ -818,13 +818,13 @@ done:
+               new = st_alloc_task(ap, state);
+               if (new)
+                       list_add(&new->list, head);
+-              /* Added to empty state queue, kick state machine */
+-              signaled = 1;
+-              status = pthread_cond_signal(&cond);
+-              if (status)
+-                      fatal(status);
+       }
++      signaled = 1;
++      status = pthread_cond_signal(&cond);
++      if (status)
++              fatal(status);
++
+       return 1;
+ }
diff --git a/autofs-5.0.8-fix-undefined-authtype_requires_creds-err-if-ldap-en.patch b/autofs-5.0.8-fix-undefined-authtype_requires_creds-err-if-ldap-en.patch
new file mode 100644 (file)
index 0000000..bf50ab9
--- /dev/null
@@ -0,0 +1,52 @@
+autofs-5.0.8 - fix undefined authtype_requires_creds err if ldap enabled but without sasl
+
+From: Lan Yixun (dlan) <dennis.yxun@gmail.com>
+
+This patch is moving "WITH_SASL" into authtype_requires_creds function
+make it return 0 if sasl not enabled, which mean authtype_requires_creds is not enabled
+
+https://bugs.gentoo.org/show_bug.cgi?id=489128
+---
+ CHANGELOG             |    4 ++++
+ modules/lookup_ldap.c |    4 ++--
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+diff --git a/CHANGELOG b/CHANGELOG
+index 62dac81..a45ca6a 100644
+--- a/CHANGELOG
++++ b/CHANGELOG
+@@ -1,3 +1,7 @@
++??/??/20?? autofs-5.0.9
++=======================
++- fix undefined authtype_requires_creds err if ldap enabled but without sasl.
++
+ 17/10/2013 autofs-5.0.8
+ =======================
+ - fix nobind sun escaped map entries.
+diff --git a/modules/lookup_ldap.c b/modules/lookup_ldap.c
+index 2ab1e8c..04b1da7 100644
+--- a/modules/lookup_ldap.c
++++ b/modules/lookup_ldap.c
+@@ -846,20 +846,20 @@ int get_property(unsigned logopt, xmlNodePtr node, const char *prop, char **valu
+       return 0;
+ }
+-#ifdef WITH_SASL
+ /*
+  *  For plain text, login and digest-md5 authentication types, we need
+  *  user and password credentials.
+  */
+ int authtype_requires_creds(const char *authtype)
+ {
++#ifdef WITH_SASL
+       if (!strncmp(authtype, "PLAIN", strlen("PLAIN")) ||
+           !strncmp(authtype, "DIGEST-MD5", strlen("DIGEST-MD5")) ||
+           !strncmp(authtype, "LOGIN", strlen("LOGIN")))
+               return 1;
++#endif
+       return 0;
+ }
+-#endif
+ /*
+  *  Returns:
index 64e05ffa704fd9586c307cc4a7b96187f8577322..a01d95671260adb24c410e80f498294abbb1b685 100644 (file)
@@ -1,14 +1,12 @@
 --- autofs-5.0.5/daemon/Makefile.orig  2009-09-03 12:00:12.000000000 +0200
 +++ autofs-5.0.5/daemon/Makefile       2009-09-18 13:41:12.350991340 +0200
-@@ -22,12 +22,8 @@
+@@ -22,10 +22,8 @@
  LDFLAGS += -rdynamic
  LIBS = -ldl
  
 -ifeq ($(LDAP), 1)
--  ifeq ($(SASL), 1)
 -    CFLAGS += $(XML_FLAGS)
 -    LIBS += $(XML_LIBS)
--  endif
 -endif
 +CFLAGS += $(XML_FLAGS)
 +LIBS += $(XML_LIBS)
index 47c2b4bfc6761ef5d53d1d678573c2c5638b8a12..51a5c1235fd9ea859b323b07afb8351f2004a851 100644 (file)
@@ -2,7 +2,7 @@
 # - change /net to something FHS-compliant ?
 #
 # Conditional build:
-%bcond_with    ldap    # build LDAP extension module (need port to heimdal)
+%bcond_without ldap    # don't build LDAP extension module
 #
 Summary:       autofs daemon
 Summary(de.UTF-8):     autofs daemon
@@ -12,13 +12,13 @@ Summary(pl.UTF-8):  Demon autofs
 Summary(pt_BR.UTF-8):  Servidor autofs
 Summary(tr.UTF-8):     autofs sunucu süreci
 Name:          autofs
-Version:       5.0.5
+Version:       5.0.8
 Release:       1
 Epoch:         1
 License:       GPL v2+
 Group:         Daemons
-Source0:       ftp://ftp.kernel.org/pub/linux/daemons/autofs/v5/%{name}-%{version}.tar.bz2
-# Source0-md5: a1d262cb6ebef0c2dd0fe22232fb3d5a
+Source0:       ftp://ftp.kernel.org/pub/linux/daemons/autofs/v5/%{name}-%{version}.tar.xz
+# Source0-md5: 4ed5271598fb1a76475364a4879c7578
 Source1:       %{name}.init
 Source2:       %{name}-auto.master
 Source3:       %{name}-auto.media
@@ -26,6 +26,13 @@ Source4:     %{name}-auto.net
 Source5:       %{name}.sysconfig
 Patch0:                %{name}-open_max.patch
 Patch1:                %{name}-makefile.patch
+Patch100:      autofs-5.0.8-fix-undefined-authtype_requires_creds-err-if-ldap-en.patch
+Patch101:      autofs-5.0.8-fix-master-map-type-check.patch
+Patch102:      autofs-5.0.8-fix-task-manager-not-getting-signaled.patch
+Patch103:      autofs-5.0.8-allow-with-systemd-to-take-a-path-arg.patch
+Patch104:      autofs-5.0.8-fix-WITH_LIBTIRPC-function-name.patch
+Patch105:      autofs-5.0.8-fix-ipv6-libtirpc-getport.patch
+Patch106:      autofs-5.0.8-fix-allow-with-systemd-to-take-a-path-arg.patch
 BuildRequires: autoconf
 BuildRequires: automake
 BuildRequires: bind-devel
@@ -34,13 +41,16 @@ BuildRequires:      e2fsprogs
 BuildRequires: flex
 BuildRequires: heimdal-devel
 BuildRequires: hesiod-devel
+BuildRequires: libtirpc-devel
 BuildRequires: libxml2-devel
 BuildRequires: mount
 %{?with_ldap:BuildRequires:    openldap-devel >= 2.4.6}
-BuildRequires: rpmbuild(macros) >= 1.268
+BuildRequires: rpmbuild(macros) >= 1.647
 Requires(post,preun):  /sbin/chkconfig
+Requires(post,preun,postun):   systemd-units >= 38
 Requires:      mktemp
 Requires:      rc-scripts
+Requires:      systemd-units >= 0.38
 BuildRoot:     %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
 
 %define                _sysconfdir     /etc/autofs
@@ -103,6 +113,13 @@ trzymanych na serwerze LDAP.
 %setup -q
 %patch0 -p1
 %patch1 -p1
+%patch100 -p1
+%patch101 -p1
+%patch102 -p1
+%patch103 -p1
+%patch104 -p1
+%patch105 -p1
+%patch106 -p1
 
 %build
 %{__autoconf}
@@ -112,7 +129,9 @@ export initdir=/etc/rc.d/init.d
        --with-openldap=%{?with_ldap:yes}%{!?with_ldap:no} \
        --enable-force-shutdown=yes \
        --with-confdir=%{_sysconfdir} \
-       --with-mapdir=%{_sysconfdir}
+       --with-mapdir=%{_sysconfdir} \
+       --with-libtirpc \
+       --with-systemd=%{systemdunitdir}
 
 %{__make} -j1 \
        initdir=/etc/rc.d/init.d \
@@ -149,12 +168,20 @@ if [ -f /var/lock/subsys/automount ]; then
        mv /var/lock/subsys/{automount,autofs}
 fi
 %service autofs restart "autofs daemon"
+%systemd_post autofs.service
 
 %preun
 if [ "$1" = "0" ]; then
        %service autofs stop
        /sbin/chkconfig --del autofs
 fi
+%systemd_preun autofs.service
+
+%postun
+%systemd_reload
+
+%triggerpostun -- autofs < 5.0.8-1
+%systemd_trigger autofs.service
 
 %files
 %defattr(644,root,root,755)
@@ -170,9 +197,11 @@ fi
 %attr(640,root,root) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/auto.tmp
 %attr(640,root,root) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/auto.var
 %attr(754,root,root) /etc/rc.d/init.d/autofs
+%{systemdunitdir}/autofs.service
 %attr(755,root,root) %{_sbindir}/automount
 %dir /net
 %dir %{_libdir}/autofs
+%attr(755,root,root) %{_libdir}/autofs/lookup_dir.so
 %attr(755,root,root) %{_libdir}/autofs/lookup_file.so
 %attr(755,root,root) %{_libdir}/autofs/lookup_files.so
 %attr(755,root,root) %{_libdir}/autofs/lookup_hesiod.so
@@ -189,6 +218,7 @@ fi
 %attr(755,root,root) %{_libdir}/autofs/mount_changer.so
 %attr(755,root,root) %{_libdir}/autofs/mount_ext2.so
 %attr(755,root,root) %{_libdir}/autofs/mount_ext3.so
+%attr(755,root,root) %{_libdir}/autofs/mount_ext4.so
 %attr(755,root,root) %{_libdir}/autofs/mount_generic.so
 %attr(755,root,root) %{_libdir}/autofs/mount_nfs.so
 %attr(755,root,root) %{_libdir}/autofs/mount_nfs4.so
This page took 0.395535 seconds and 4 git commands to generate.