summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2017-03-16mount.cifs: Remove data_blob.h includeThomas Witt1-1/+0
data_blob.h includes talloc.h from libtalloc, but that is only marked as a dependency for cifs.upcall. No symbols from that header are used by cifs.mount, so remove it to avoid the libtalloc dependency Signed-off-by: Thomas Witt <pyromaniac@exherbo.org>
2017-03-02cifs-utils: bump version to 6.7cifs-utils-6.7Jeff Layton1-1/+1
Signed-off-by: Jeff Layton <jlayton@samba.org>
2017-02-28cifs.upcall: use a MEMORY: ccache when instantiating from a keytabJeff Layton1-2/+2
Using a more permanent ccache is potentially problematic when we're instantiating a new one. We might be operating under different creds than expected. Just use a MEMORY: ccache since we don't need it to last longer than the life of the upcall anyway. Reported-and-Tested-by: Chad William Seys <cwseys@physics.wisc.edu> Signed-off-by: Jeff Layton <jlayton@samba.org>
2017-02-24cifs.upcall: don't do env scraping when uid is 0Jeff Layton2-2/+13
Setuid programs triggering upcalls could trick the program here. Also, the d_automount method is done with credentials overridden so if you can end up with mismatched creds and env vars due to that as well. It's a hack, but the only recourse I can see is to avoid doing this when the uid is 0. That means we can't rely on finding root credcaches in alternate locations using $KRB5CCNAME, but I think that's the best we can do. Reported-and-Tested-by: Chad William Seys <cwseys@physics.wisc.edu> Signed-off-by: Jeff Layton <jlayton@samba.org>
2017-02-24cifs.upcall: unset $KRB5CCNAME when creating new credcache from keytabJeff Layton1-0/+6
We don't want to trust $KRB5CCNAME when creating or updating a new credcache since we could be operating under the wrong credentials. Always create new credcaches in the default location instead. Reported-by: Chad William Seys <cwseys@physics.wisc.edu> Signed-off-by: Jeff Layton <jlayton@samba.org>
2017-02-24data_blob: Eliminate _PUBLIC_Jeff Layton2-10/+6
It's defined to nothing anyway. Signed-off-by: Jeff Layton <jlayton@samba.org>
2017-02-24treewide: Eliminate SAFE_FREEJeff Layton2-23/+15
It just frees and then zeroes out the pointer. That's of dubious value in the places where it's currently being used. Just use free() instead. Signed-off-by: Jeff Layton <jlayton@samba.org>
2017-02-24replace.h: remove itJeff Layton2-675/+1
Nothing uses it now. Signed-off-by: Jeff Layton <jlayton@samba.org>
2017-02-24cifs.upcall: remove need for replace.hJeff Layton1-3/+19
Take just what we need from replace.h and move it to cifs.upcall.c. Signed-off-by: Jeff Layton <jlayton@samba.org>
2017-02-24spengo.c/asn1.c: remove need for replace.hJeff Layton2-2/+2
Just need stdbool.h instead. Signed-off-by: Jeff Layton <jlayton@samba.org>
2017-02-24data_blob: remove need for replace.hJeff Layton1-1/+4
We only need ZERO_STRUCT there. Signed-off-by: Jeff Layton <jlayton@samba.org>
2017-02-16cifs.upcall: trim even more capabilitiesJeff Layton1-9/+8
We really only need CAP_DAC_READ_SEARCH, not CAP_DAC_OVERRIDE, and only when we are going to probe the environ file. Also, fix the non-libcap-ng trim_capabilities prototype. Reviewed-by: Simo Sorce <simo@redhat.com> Signed-off-by: Jeff Layton <jlayton@samba.org>
2017-02-15cifs.upcall: allow scraping of KRB5CCNAME out of initiating task's ↵Jeff Layton2-7/+152
/proc/<pid>/environ file Chad reported that he was seeing a regression in cifs-utils-6.6. Prior to that, cifs.upcall was able to find credcaches in non-default FILE: locations, but with the rework of that code, that ability was lost. Unfortunately, the krb5 library design doesn't really take into account the fact that we might need to find a credcache in a process that isn't descended from the session. When the kernel does an upcall, it passes several bits of info about the task that initiated the upcall. One of those things is the PID (the tgid, in particular). We can use that info to reach into the /proc/<pid>/environ file for the process, and grab whatever value of $KRB5CCNAME is there. Then, after switching credentials, set $KRB5CCNAME in the environment to the same value before opening the credcache, to hint to the krb5 libs where they ought to look. This new behavior is on by default, but can be disabled by having request-key pass a '-E' flag to cifs.upcall. Reported-by: Chad William Seys <cwseys@physics.wisc.edu> Signed-off-by: Jeff Layton <jlayton@samba.org>
2017-02-15cifs.upcall: drop capabilities early in programJeff Layton2-1/+65
Much of cifs.upcall can and should be run without elevated privileges. On entry into the program, drop as many capabilities as we can get away with, and then always drop any remaining caps after calling setuid(). Signed-off-by: Jeff Layton <jlayton@samba.org>
2017-02-14cifs.upcall: switch group IDs when handling an upcallJeff Layton1-0/+37
Currently, we leave the group ID alone, but in a later patch we'll be changing cifs.upcall to scrape $KRB5CCNAME out of the originating process. At that point, we want to be a little more careful with the process credentials we'll be using. After we get the uid, do a getpwuid and grab the default gid for the user. Then use setgid to set it before calling setuid. Signed-off-by: Jeff Layton <jlayton@samba.org>
2017-02-14cifs.upcall: convert two flags from int to boolJeff Layton1-4/+5
Signed-off-by: Jeff Layton <jlayton@samba.org>
2017-01-04manpage: document mfsymlinks in the mount.cifs man pageSachin Prabhu1-0/+5
Information from the cifs README in the kernel sources is used. Signed-off-by: Sachin Prabhu <sprabhu@redhat.com>
2016-11-27mount.cifs: Remove unneeded stdbool header includeGermano Percossi1-1/+0
Signed-off-by: Germano Percossi <germano.percossi@citrix.com>
2016-11-27mount.cifs: Fixed command line parsing and aligned with kernelGermano Percossi1-35/+47
The way token matching was done was consuming the parameters namespace quickly. For example, anything starting with "dom" was interpreted with domain, while it could have been a completely different word. The same is true even for "ro". Moreover, many perfectly valid options like "addr" where not accepted. The cifs kernel module is very strict when it comes to names: 'dom' and 'domain' are valid while 'domai' is not, so the userspace tool needs to comply otherwise it becomes very difficult to come up with new names for options. Now, checking is strict and as close as possible to kernel. When it is not, it is just to avoid breaking compatibility with some users. However, workg has been removed because it is too lazy and undocumented. The only variable left without strict checking is 'x-' because the intent is to ignore anything starting in that way Signed-off-by: Germano Percossi <germano.percossi@citrix.com>
2016-11-27mount.cifs: Accept empty domains on the command lineGermano Percossi1-3/+12
If we do not allow empty domains on the command line we are preventing the kernel module from taking different actions if the domain has not been specified at all or just passed empty. In fact, with this fix the cifs module behaves differently once an empty domain is passed: the find_domain_name function is not invoked when an empty domain is passed. It is possible to pass both 'domain=' or 'domain=""' even though the kernel module will accept the former only when associated with the sloppy option. Signed-off-by: Germano Percossi <germano.percossi@citrix.com>
2016-11-27mount.cifs: Removed extra comma in front of domainGermano Percossi1-1/+1
Signed-off-by: Germano Percossi <germano.percossi@citrix.com>
2016-11-27cifs-utils: bump version to 6.6.1 for pre-release buildsJeff Layton1-1/+1
Signed-off-by: Jeff Layton <jlayton@samba.org>
2016-09-01autoconf: set version to 6.6cifs-utils-6.6Jeff Layton1-1/+1
Signed-off-by: Jeff Layton <jlayton@samba.org>
2016-08-24cifs.upcall: stop passing around ccache name stringsJeff Layton1-57/+41
Instead, get a ccache handle and pass that around. That way we can keep the cache open until the program is complete as well. Signed-off-by: Jeff Layton <jlayton@samba.org>
2016-08-24cifs.upcall: make get_tgt_time take a ccache argJeff Layton1-11/+10
...instead of dealing with the ccname. Push resolution of the cache into the caller. Signed-off-by: Jeff Layton <jlayton@samba.org>
2016-08-24cifs.upcall: remove KRB5_TC_OPENCLOSEJeff Layton1-6/+0
The header file says that this is deprecated, and all of the info I've seen about it mentioned that it was for performance more than correctness. It dates back to the original code dump from Igor, so I think we're safe to just drop it at this point. Signed-off-by: Jeff Layton <jlayton@samba.org>
2016-08-22cifs.upcall: make the krb5_context a static global variableJeff Layton1-45/+16
There's no need to keep initing a new context for every function. Just do it once and reuse as needed. Signed-off-by: Jeff Layton <jlayton@samba.org>
2016-08-21cifs.upcall: use krb5 routines to get default ccnameJeff Layton1-121/+27
Currently we end up groveling around in /tmp, trying to guess what the credcache will be. Instead, just get the default ccname for the user, and then see if it has a valid tgt. If it doesn't then we try to use the keytab to init the credcache before proceeding. Signed-off-by: Jeff Layton <jlayton@samba.org>
2016-07-12aclocal: fix typo in idmap.m4Jeff Layton1-1/+1
We really don't want to do the same check twice. Signed-off-by: Jeff Layton <jlayton@samba.org>
2016-07-12autoconf: set package version to 6.5.1 for interim buildsJeff Layton1-1/+1
Signed-off-by: Jeff Layton <jlayton@samba.org>
2016-02-22autoconf: set version to 6.5cifs-utils-6.5Jeff Layton1-1/+1
Signed-off-by: Jeff Layton <jlayton@samba.org>
2016-01-20autoconf: Use $(DEFS) when building idmapwb.so and pam_cifscreds.soSachin Prabhu1-2/+2
We should pass the macros defined in $(DEFS) when building idmapwb.so and pam_cifscreds.so. The autoconf process sets the macro HAVE_CONFIG_H using the $(DEFS) variable. This macro has to be defined to allow the source files to include config.h Signed-off-by: Sachin Prabhu <sprabhu@redhat.com>
2016-01-07mount.cifs: ignore x-* mount optionsKarel Zak1-0/+2
x-* prefix is used for userspace mount options and it's pretty commonly used to extend fstab configuration in systemd world (e.g. x-systemd.automount). These options is necessary to ignored. The command mount(8) does not pass x-* mount options to mount.<type> helpers, but in some use-cases it's possible that the cifs helper reads mount options from fstab or users directly call mount.cifs and copy & past mount options, etc. This patch marks all options prefixed by "x-" as OPT_IGNORE to make things more robust for end-users. We already uses the same concept for _netdev. Signed-off-by: Karel Zak <kzak@redhat.com> Signed-off-by: Jeff Layton <jlayton@samba.org>
2016-01-07manpage: clarify use of backupuid and backupgid in mount.cifs.8Uri Simchoni1-3/+3
Assert that backup intent shall only be attempted if the user matches the backupuid or backupgid parameter. Signed-off-by: Uri Simchoni <uri@samba.org> Signed-off-by: Jeff Layton <jlayton@samba.org>
2014-12-08mtab.c: include <paths.h> for _PATH_MOUNTEDFelix Janda1-0/+1
Signed-off-by: Felix Janda <felix.janda@posteo.de>
2014-12-08autoconf: set version to 6.4.1 for interim buildsJeff Layton1-1/+1
Signed-off-by: Jeff Layton <jlayton@samba.org>
2014-07-11autoconf: set version to 6.4cifs-utils-6.4Jeff Layton1-1/+1
Signed-off-by: Jeff Layton <jlayton@samba.org>
2014-07-01mount.cifs: on 2nd try mount.cifs must also uppercase "orig_dev"Guenter Kukkukk1-1/+2
Recent kernels now ignore "unc=..." mount option. mount.cifs, when getting errno=ENXIO, retries the mount with uppercased hostname, sharename and prefixpath in the "unc=..." mount option, which is ignored now in the kernel. Used e.g. during OS/2 mounts, which fail now. Also uppercase the now used "orig_dev" parameter. Signed-off-by: Guenter Kukkukk <kukks@samba.org>
2014-04-20cifscreds: better error handling for key_addJeff Layton3-9/+14
If the string buffers would have been overrun, set errno to EINVAL before returning. Then, have the callers report the errors to stderr or syslog as appropriate. Cc: Sebastian Krahmer <krahmer@suse.de> Signed-off-by: Jeff Layton <jlayton@samba.org>
2014-04-20cifscreds: better error handling when key_search failsJeff Layton3-1/+22
If we ended up getting a bogus string that would have overflowed, then make key_search set errno to EINVAL before returning. The callers can then test to see if the returned error is what was expected or something else and handle it appropriately. Cc: Sebastian Krahmer <krahmer@suse.de> Signed-off-by: Jeff Layton <jlayton@samba.org>
2014-04-14cifskey: better use snprintf()Sebastian Krahmer1-3/+7
Prefer snprintf() over sprintf() in cifskey.c Projects that fork the code (pam_cifscreds) can't rely on the max-size parameters. [jlayton: removed unneeded initialization of "len" in key_add] Signed-off-by: Sebastian Krahmer <krahmer@suse.de>
2014-04-07cifs: use krb5_kt_default() to determine default keytab locationJeff Layton1-4/+9
...don't assume that it's in /etc/krb5.keytab. Reported-by: Konstantin Lepikhov <klepikho@redhat.com> Signed-off-by: Jeff Layton <jlayton@samba.org>
2014-04-07autoconf: allow PAM security install directory to be configurableLars Müller2-2/+6
Allow the pam module install directory to be set at build time. Signed-off-by: Jeff Layton <jlayton@samba.org>
2014-04-07autoconf: set version to 6.3.1 for interim buildsJeff Layton1-1/+1
Signed-off-by: Jeff Layton <jlayton@samba.org>
2014-01-09autoconf: set version to 6.3cifs-utils-6.3Jeff Layton1-1/+1
Signed-off-by: Jeff Layton <jlayton@samba.org>
2013-12-13manpage: add pam_cifscreds.8 man pageOrion Poplawski3-0/+292
Signed-off-by: Orion Poplawski <orion@nwra.com>
2013-12-07cifscreds: fix up some whitespace, typos and build warnings in pam_cifscreds.cJeff Layton1-19/+15
gcc -g -O2 -Wall -Wextra -D_FORTIFY_SOURCE=2 -fpie -pie -Wl,-z,relro,-z,now -shared -fpic -o pam_cifscreds.so pam_cifscreds.c cifskey.c resolve_host.c util.c -lpam -lkeyutils pam_cifscreds.c: In function ‘cleanup_free_password’: pam_cifscreds.c:143:38: warning: unused parameter ‘ph’ [-Wunused-parameter] cleanup_free_password (pam_handle_t *ph, void *data, int pam_end_status) ^ pam_cifscreds.c:143:58: warning: unused parameter ‘pam_end_status’ [-Wunused-parameter] cleanup_free_password (pam_handle_t *ph, void *data, int pam_end_status) ^ pam_cifscreds.c: In function ‘cifscreds_pam_update’: pam_cifscreds.c:271:8: warning: variable ‘addrs’ set but not used [-Wunused-but-set-variable] char *addrs[16]; ^ pam_cifscreds.c: In function ‘pam_sm_authenticate’: pam_cifscreds.c:359:58: warning: unused parameter ‘unused’ [-Wunused-parameter] PAM_EXTERN int pam_sm_authenticate(pam_handle_t *ph, int unused, int argc, const char **argv) ^ pam_cifscreds.c: In function ‘pam_sm_open_session’: pam_cifscreds.c:414:58: warning: unused parameter ‘flags’ [-Wunused-parameter] PAM_EXTERN int pam_sm_open_session(pam_handle_t *ph, int flags, int argc, const char **argv) ^ pam_cifscreds.c: In function ‘pam_sm_close_session’: pam_cifscreds.c:487:51: warning: unused parameter ‘ph’ [-Wunused-parameter] PAM_EXTERN int pam_sm_close_session(pam_handle_t *ph, int flags, int argc, const char **argv) ^ pam_cifscreds.c:487:59: warning: unused parameter ‘flags’ [-Wunused-parameter] PAM_EXTERN int pam_sm_close_session(pam_handle_t *ph, int flags, int argc, const char **argv) ^ pam_cifscreds.c:487:70: warning: unused parameter ‘argc’ [-Wunused-parameter] PAM_EXTERN int pam_sm_close_session(pam_handle_t *ph, int flags, int argc, const char **argv) ^ pam_cifscreds.c:487:89: warning: unused parameter ‘argv’ [-Wunused-parameter] PAM_EXTERN int pam_sm_close_session(pam_handle_t *ph, int flags, int argc, const char **argv) ^ pam_cifscreds.c: In function ‘pam_sm_setcred’: pam_cifscreds.c:501:45: warning: unused parameter ‘ph’ [-Wunused-parameter] PAM_EXTERN int pam_sm_setcred(pam_handle_t *ph, int flags, int argc, const char **argv) ^ pam_cifscreds.c:501:53: warning: unused parameter ‘flags’ [-Wunused-parameter] PAM_EXTERN int pam_sm_setcred(pam_handle_t *ph, int flags, int argc, const char **argv) ^ pam_cifscreds.c:501:64: warning: unused parameter ‘argc’ [-Wunused-parameter] PAM_EXTERN int pam_sm_setcred(pam_handle_t *ph, int flags, int argc, const char **argv) ^ pam_cifscreds.c:501:83: warning: unused parameter ‘argv’ [-Wunused-parameter] PAM_EXTERN int pam_sm_setcred(pam_handle_t *ph, int flags, int argc, const char **argv) ^ Signed-off-by: Jeff Layton <jlayton@samba.org>
2013-12-07cifscreds: create PAM module to insert credentials at loginOrion Poplawski6-52/+681
Split out some of the cifscreds key handling routines into a separate file, and then link that in to both cifscreds and the new PAM module. Fix up autoconf to handle building this automatically. Signed-off-by: Orion Poplawski <orion@nwra.com>
2013-12-07autoconf: fix link of libwbclientJeff Layton1-0/+2
It's currently getting added to $LIBS and being linked into places that we don't need it. Signed-off-by: Jeff Layton <jlayton@samba.org>
2013-10-14asn1: fix use-after-free in asn1_writeJeff Layton1-1/+0
If the talloc_realloc() fails, asn1_write calls talloc_free on the context and then immediately dereferences the pointer. Fix this by skipping the talloc_free here. Let the caller handle it. Signed-off-by: Jeff Layton <jlayton@samba.org>