#endif
extern int verbose;
+extern int sloppy;
char *IDMAPLCK = DEFAULT_DIR "/rpcidmapd";
#define idmapd_check() do { \
static struct nfs4_mount_data data;
static char hostdir[1024];
static char ip_addr[16] = "127.0.0.1";
- static struct sockaddr_in server_addr;
+ static struct sockaddr_in server_addr, client_addr;
static int pseudoflavour[MAX_USER_FLAVOUR];
int num_flavour = 0;
+ int ip_addr_in_opts = 0;
char *hostname, *dirname, *old_opts;
char new_opts[1024];
char *s;
int val;
int bg, soft, intr;
- int nocto, noac;
+ int nocto, noac, unshared;
int retry;
int retval;
time_t timeout, t;
intr = NFS4_MOUNT_INTR;
nocto = 0;
noac = 0;
+ unshared = 0;
retry = 10000; /* 10000 minutes ~ 1 week */
/*
opteq+1);
strncpy(ip_addr,opteq+1, sizeof(ip_addr));
ip_addr[sizeof(ip_addr)-1] = '\0';
+ ip_addr_in_opts = 1;
} else if (!strcmp(opt, "sec")) {
num_flavour = parse_sec(opteq+1, pseudoflavour);
if (!num_flavour)
goto fail;
- } else if (!strcmp(opt, "addr")) {
+ } else if (!strcmp(opt, "addr") || sloppy) {
/* ignore */;
} else {
printf(_("unknown nfs mount parameter: "
nocto = !val;
else if (!strcmp(opt, "ac"))
noac = !val;
- else {
+ else if (!strcmp(opt, "sharecache"))
+ unshared = !val;
+ else if (!sloppy) {
printf(_("unknown nfs mount option: "
"%s%s\n"), val ? "" : "no", opt);
goto fail;
data.flags = (soft ? NFS4_MOUNT_SOFT : 0)
| (intr ? NFS4_MOUNT_INTR : 0)
| (nocto ? NFS4_MOUNT_NOCTO : 0)
- | (noac ? NFS4_MOUNT_NOAC : 0);
+ | (noac ? NFS4_MOUNT_NOAC : 0)
+ | (unshared ? NFS4_MOUNT_UNSHARED : 0);
/*
* Give a warning if the rpc.idmapd daemon is not running
*/
+#if 0
+ /* We shouldn't have these checks as nothing in this package
+ * creates the files that are checked
+ */
idmapd_check();
if (num_flavour == 0)
*/
gssd_check();
}
+#endif
data.auth_flavourlen = num_flavour;
data.auth_flavours = pseudoflavour;
data.acregmin, data.acregmax, data.acdirmin, data.acdirmax);
printf("port = %d, bg = %d, retry = %d, flags = %.8x\n",
ntohs(server_addr.sin_port), bg, retry, data.flags);
- printf("soft = %d, intr = %d, nocto = %d, noac = %d\n",
+ printf("soft = %d, intr = %d, nocto = %d, noac = %d, "
+ "nosharecache = %d\n",
(data.flags & NFS4_MOUNT_SOFT) != 0,
(data.flags & NFS4_MOUNT_INTR) != 0,
(data.flags & NFS4_MOUNT_NOCTO) != 0,
- (data.flags & NFS4_MOUNT_NOAC) != 0);
+ (data.flags & NFS4_MOUNT_NOAC) != 0,
+ (data.flags & NFS4_MOUNT_UNSHARED) != 0);
if (num_flavour > 0) {
int pf_cnt, i;
NFS_PROGRAM, 4, data.proto == IPPROTO_UDP ? "udp" : "tcp",
ntohs(server_addr.sin_port));
}
- clnt_ping(&server_addr, NFS_PROGRAM, 4, data.proto);
- if (rpc_createerr.cf_stat == RPC_SUCCESS)
+ client_addr.sin_family = 0;
+ client_addr.sin_addr.s_addr = 0;
+ clnt_ping(&server_addr, NFS_PROGRAM, 4, data.proto, &client_addr);
+ if (rpc_createerr.cf_stat == RPC_SUCCESS) {
+ if (!ip_addr_in_opts &&
+ client_addr.sin_family != 0 &&
+ client_addr.sin_addr.s_addr != 0) {
+ snprintf(ip_addr, sizeof(ip_addr), "%s",
+ inet_ntoa(client_addr.sin_addr));
+ data.client_addr.len = strlen(ip_addr);
+ }
break;
+ }
switch(rpc_createerr.cf_stat){
case RPC_TIMEDOUT: