summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYuri Chornoivan <yurchor@ukr.net>2018-02-15 16:56:50 +0200
committerMartin Whitaker <mageia@martin-whitaker.me.uk>2018-05-28 20:24:02 +0100
commitdec1b70b0b85651d9ed92297b9bcd0675fc7d386 (patch)
tree7cb37554ec7dc8274d103ae8d3956b31e4e9b2a5
parent20536102b69c803d37b469a4ad7b22b79f21e488 (diff)
downloaddrakx-dec1b70b0b85651d9ed92297b9bcd0675fc7d386.tar
drakx-dec1b70b0b85651d9ed92297b9bcd0675fc7d386.tar.gz
drakx-dec1b70b0b85651d9ed92297b9bcd0675fc7d386.tar.bz2
drakx-dec1b70b0b85651d9ed92297b9bcd0675fc7d386.tar.xz
drakx-dec1b70b0b85651d9ed92297b9bcd0675fc7d386.zip
Update Norwegian (Bokmal) translation from Tx
(cherry picked from commit d8f5436775627cdb3a3990ce2a7dfb0e0ec0125c)
-rw-r--r--perl-install/install/share/po/nb.po78
1 files changed, 39 insertions, 39 deletions
diff --git a/perl-install/install/share/po/nb.po b/perl-install/install/share/po/nb.po
index ffc85ff7e..d69912fe4 100644
--- a/perl-install/install/share/po/nb.po
+++ b/perl-install/install/share/po/nb.po
@@ -6,7 +6,7 @@
# Andreas Bergstrøm <abergstr@halden.net>, 2000
# Eskild Hustvedt <eskild@goldenfiles.com>, 2004
# Eskild Hustvedt <zerodogg@skolelinux.no>, 2004-2005
-# Karl Morten Ramberg <karl.m.ramberg@gmail.com>, 2017
+# Karl Morten Ramberg <karl.m.ramberg@gmail.com>, 2017-2018
# Keld Simonsen <keld@dkuug.dk>, 2004,2007
# Kenneth Rørvik <kenneth@argon.no-ip.com>, 2003
# Marius Laache <blakern_@hotmail.com>, 2007
@@ -21,7 +21,7 @@ msgstr ""
"Project-Id-Version: Mageia\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-06-22 02:36+0200\n"
-"PO-Revision-Date: 2017-04-26 20:09+0000\n"
+"PO-Revision-Date: 2018-02-15 00:26+0000\n"
"Last-Translator: Karl Morten Ramberg <karl.m.ramberg@gmail.com>\n"
"Language-Team: Norwegian Bokmål (http://www.transifex.com/MageiaLinux/mageia/"
"language/nb/)\n"
@@ -190,17 +190,17 @@ msgstr ""
#: any.pm:391
#, c-format
msgid "Core Release"
-msgstr "Kjerne utgivelse"
+msgstr "Kjerneutgivelse"
#: any.pm:393
#, c-format
msgid "Tainted Release"
-msgstr "Smittet utgivelse"
+msgstr "Smittetutgivelse"
#: any.pm:395
#, c-format
msgid "Nonfree Release"
-msgstr "Ikke fri utgivelse"
+msgstr "Ikke-friutgivelse"
#: any.pm:433
#, c-format
@@ -208,7 +208,7 @@ msgid ""
"Some hardware on your machine needs some non free firmwares in order for the "
"free software drivers to work."
msgstr ""
-"Maskinvare i din maskin trenger enkelte ikke fri \"firmware\" for at de "
+"Maskinvaren i din maskin trenger enkelte ikke-fri \"firmware\" for at de "
"frie programvaredriverne skal fungere."
#: any.pm:434
@@ -224,7 +224,7 @@ msgstr "\"%s\" inneholder de enkelte delene av systemet og dets applikasjoner"
#: any.pm:473
#, c-format
msgid "\"%s\" contains non free software.\n"
-msgstr "\"%s\" inneholder ikke fri programvare\n"
+msgstr "\"%s\" inneholder ikke-fri programvare\n"
#: any.pm:474
#, c-format
@@ -330,7 +330,7 @@ msgstr "Nettverk"
#: any.pm:1386
#, c-format
msgid "Please choose a media"
-msgstr "Velg et medie"
+msgstr "Velg et medium"
#: any.pm:1402
#, c-format
@@ -540,8 +540,8 @@ msgid ""
"Set of tools to read and send mail and news (mutt, tin..) and to browse the "
"Web"
msgstr ""
-"Sett med verktøy for å lese og sende e-post og njus (mutt, tin..) og til å "
-"surfe på nettet"
+"Et sett med verktøy for å lese og sende e-post og nyheter (mutt, tin..) og "
+"til å surfe på nettet"
#: share/meta-task/compssUsers.pl:42
#, c-format
@@ -577,7 +577,7 @@ msgstr "Utvikling"
#: share/meta-task/compssUsers.pl:59 share/meta-task/compssUsers.pl:204
#, c-format
msgid "C and C++ development libraries, programs and include files"
-msgstr "C- og C++-utviklingsbibliotek, -programmer og include-filer"
+msgstr "C- og C++-utviklingsbibliotek, -programmer og inkluderings-filer"
#: share/meta-task/compssUsers.pl:63 share/meta-task/compssUsers.pl:208
#, c-format
@@ -587,7 +587,7 @@ msgstr "Dokumentasjon"
#: share/meta-task/compssUsers.pl:64 share/meta-task/compssUsers.pl:209
#, c-format
msgid "Books and Howto's on Linux and Free Software"
-msgstr "Bøker og Howto's om Linux og fri programvare"
+msgstr "Bøker og veiledninger om Linux og fri programvare"
#: share/meta-task/compssUsers.pl:68 share/meta-task/compssUsers.pl:212
#, c-format
@@ -602,7 +602,7 @@ msgstr "Linux Standard Base. Støtte for tredjeparts programvare"
#: share/meta-task/compssUsers.pl:79
#, c-format
msgid "Web Server"
-msgstr "Webtjener"
+msgstr "Webserver"
#: share/meta-task/compssUsers.pl:80
#, c-format
@@ -617,7 +617,7 @@ msgstr "Gruppevare"
#: share/meta-task/compssUsers.pl:85
#, c-format
msgid "Kolab Server"
-msgstr "Kolab-tjener"
+msgstr "Kolab-server"
#: share/meta-task/compssUsers.pl:88 share/meta-task/compssUsers.pl:138
#, c-format
@@ -632,22 +632,22 @@ msgstr "Internett-gateway"
#: share/meta-task/compssUsers.pl:92
#, c-format
msgid "Mail/News"
-msgstr "E-post/Njus"
+msgstr "E-post/Nyheter"
#: share/meta-task/compssUsers.pl:93
#, c-format
msgid "Postfix mail server, Inn news server"
-msgstr "Postfix e-posttjener, Inn njustjener"
+msgstr "Postfix e-postserver, Inn nyhetsserver"
#: share/meta-task/compssUsers.pl:97
#, c-format
msgid "Directory Server"
-msgstr "Katalogtjener"
+msgstr "Katalogserver"
#: share/meta-task/compssUsers.pl:102
#, c-format
msgid "FTP Server"
-msgstr "FTP-tjener"
+msgstr "FTP-server"
#: share/meta-task/compssUsers.pl:103
#, c-format
@@ -662,17 +662,17 @@ msgstr "DNS/NIS"
#: share/meta-task/compssUsers.pl:108
#, c-format
msgid "Domain Name and Network Information Server"
-msgstr "Domenenavn- og nettverksinformasjons-tjener"
+msgstr "Domenenavn- og nettverksinformasjons-server"
#: share/meta-task/compssUsers.pl:112
#, c-format
msgid "File and Printer Sharing Server"
-msgstr "Fil- og Skriverdelingstjener"
+msgstr "Fil- og Skriverdelingsserver"
#: share/meta-task/compssUsers.pl:113
#, c-format
msgid "NFS Server, Samba server"
-msgstr "NFS-Tjener, Samba-tjener"
+msgstr "NFS-server, Samba-server"
#: share/meta-task/compssUsers.pl:117 share/meta-task/compssUsers.pl:133
#, c-format
@@ -682,7 +682,7 @@ msgstr "Database"
#: share/meta-task/compssUsers.pl:118
#, c-format
msgid "PostgreSQL and MariaDB Database Server"
-msgstr "PostgreSQL- og MariaDB-databasetjener"
+msgstr "PostgreSQL- og MariaDB-databaseserver"
#: share/meta-task/compssUsers.pl:123
#, c-format
@@ -702,22 +702,22 @@ msgstr "E-post"
#: share/meta-task/compssUsers.pl:129
#, c-format
msgid "Postfix mail server"
-msgstr "Postfix e-posttjener"
+msgstr "Postfix e-postserver"
#: share/meta-task/compssUsers.pl:134
#, c-format
msgid "PostgreSQL or MariaDB database server"
-msgstr "PostgreSQL eller MariaDB-databasetjener"
+msgstr "PostgreSQL eller MariaDB-databaseserver"
#: share/meta-task/compssUsers.pl:142
#, c-format
msgid "Network Computer server"
-msgstr "Nettverksmaskintjener"
+msgstr "Nettverksserver"
#: share/meta-task/compssUsers.pl:143
#, c-format
msgid "NFS server, SMB server, Proxy server, ssh server"
-msgstr "NFS-tjener, SMB-tjener, Proxy-tjener, SSH-tjener"
+msgstr "NFS-server, SMB-server, Proxy-server, SSH-server"
#: share/meta-task/compssUsers.pl:150
#, c-format
@@ -794,7 +794,7 @@ msgstr "En neste genarsjon QT portering av lettvekts skrivebordsoppsettet"
#: share/meta-task/compssUsers.pl:184
#, c-format
msgid "Enlightenment e21 Desktop"
-msgstr "Enlightenment e21 Skrivebord"
+msgstr "Enlightenmente21 Skrivebord"
#: share/meta-task/compssUsers.pl:186
#, c-format
@@ -829,7 +829,7 @@ msgstr "Verktøy"
#: share/meta-task/compssUsers.pl:220 share/meta-task/compssUsers.pl:221
#, c-format
msgid "SSH Server"
-msgstr "SSH-tjener"
+msgstr "SSH-server"
#: share/meta-task/compssUsers.pl:225
#, c-format
@@ -839,7 +839,7 @@ msgstr "Webmin"
#: share/meta-task/compssUsers.pl:226
#, c-format
msgid "Webmin Remote Configuration Server"
-msgstr "Webmin Fjernadministrasjonstjener"
+msgstr "Webmin Fjernadministrasjonsserver"
#: share/meta-task/compssUsers.pl:230
#, c-format
@@ -859,7 +859,7 @@ msgstr "Mageia-veivisere"
#: share/meta-task/compssUsers.pl:236
#, c-format
msgid "Wizards to configure server"
-msgstr "Veivisere til å sette opp tjener"
+msgstr "Veivisere for å sette opp server"
#: steps.pm:85
#, c-format
@@ -867,8 +867,8 @@ msgid ""
"An error occurred, but I do not know how to handle it nicely.\n"
"Continue at your own risk."
msgstr ""
-"En feil oppsto, men jeg vet ikke hvordan jeg skal håndtere dette på en pen "
-"måte.\n"
+"En feil oppsto, men jeg vet ikke hvordan jeg skal håndtere dette på en "
+"korrekt måte.\n"
"Fortsett på eget ansvar."
#: steps.pm:460
@@ -886,7 +886,7 @@ msgstr ""
#: steps_auto_install.pm:71 steps_stdio.pm:27
#, c-format
msgid "Entering step `%s'\n"
-msgstr "Entrer trinn `%s'\n"
+msgstr "Går inn i trinn `%s'\n"
#: steps_curses.pm:22
#, c-format
@@ -901,7 +901,7 @@ msgstr "<Tab>/<Alt-Tab> mellom elementene"
#: steps_gtk.pm:147
#, c-format
msgid "Xorg server is slow to start. Please wait..."
-msgstr "Xorg-tjeneren er treg å starte. Vennligst vent … "
+msgstr "Xorg-serverer er treg til å starte. Vennligst vent … "
#: steps_gtk.pm:212
#, c-format
@@ -1272,8 +1272,8 @@ msgid ""
"Your system does not have enough space left for installation or upgrade "
"(%dMB > %dMB)"
msgstr ""
-"Systemet har ikke nok gjenværende diskplass for installasjon eller "
-"oppgradering (%dMB > %dMB)"
+"Systemet har ikke nok ledig diskplass for installasjon eller oppgradering "
+"(%dMB > %dMB)"
#: steps_interactive.pm:428
#, c-format
@@ -1418,7 +1418,7 @@ msgstr "Oppsett etter installering"
#: steps_interactive.pm:711
#, c-format
msgid "Please ensure the Update Modules media is in drive %s"
-msgstr "Vennligst forsikre deg om at medie med oppdaterte moduler er i %s"
+msgstr "Forsikre deg om at medie med oppdaterte moduler er i %s"
#: steps_interactive.pm:739 steps_interactive.pm:769 steps_list.pm:47
#, c-format
@@ -1507,7 +1507,7 @@ msgstr "Nettverk & internett"
#: steps_interactive.pm:985
#, c-format
msgid "Proxies"
-msgstr "Mellomtjenere"
+msgstr "Proxyservere"
#: steps_interactive.pm:986
#, c-format
@@ -1590,7 +1590,7 @@ msgstr "Gratulerer"
#: steps_interactive.pm:1140
#, c-format
msgid "Reboot"
-msgstr "Restart"
+msgstr "Omstart"
#. -PO: please keep the following messages very short: they must fit in the left list of the installer!!!
#: steps_list.pm:16
a id='n614' href='#n614'>614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735
 /*
 * Guillaume Cottenceau (gc)
 *
 * Copyright 2003 Mandriva
 *
 * This software may be freely redistributed under the terms of the GNU
 * public license.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 * basing on nfsmount.c from util-linux-2.11z:
 * - use our logging facilities
 * - use our host resolving stuff
 * - remove unneeded code
 */

/*
 * nfsmount.c -- Linux NFS mount
 * Copyright (C) 1993 Rick Sladkey <jrs@world.std.com>
 *
 * 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
 * the Free Software Foundation; either version 2, or (at your option)
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * Wed Feb  8 12:51:48 1995, biro@yggdrasil.com (Ross Biro): allow all port
 * numbers to be specified on the command line.
 *
 * Fri, 8 Mar 1996 18:01:39, Swen Thuemmler <swen@uni-paderborn.de>:
 * Omit the call to connect() for Linux version 1.3.11 or later.
 *
 * Wed Oct  1 23:55:28 1997: Dick Streefland <dick_streefland@tasking.com>
 * Implemented the "bg", "fg" and "retry" mount options for NFS.
 *
 * 1999-02-22 Arkadiusz Miśkiewicz <misiek@pld.ORG.PL>
 * - added Native Language Support
 * 
 * Modified by Olaf Kirch and Trond Myklebust for new NFS code,
 * plus NFSv3 stuff.
 *
 * 2003-04-14 David Black <david.black@xilinx.com>
 * - added support for multiple hostname NFS mounts
 */

/*
 * nfsmount.c,v 1.1.1.1 1993/11/18 08:40:51 jrs Exp
 */

#define HAVE_rpcsvc_nfs_prot_h
#define HAVE_inet_aton

#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <netdb.h>
#include <time.h>
#include <rpc/rpc.h>
#include <rpc/pmap_prot.h>
#include <rpc/pmap_clnt.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <sys/utsname.h>
#include <sys/stat.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <values.h>

#include "nfsmount.h"

#ifdef HAVE_rpcsvc_nfs_prot_h
#include <rpcsvc/nfs_prot.h>
#else
#include <linux/nfs.h>
#define nfsstat nfs_stat
#endif

#include "nfs_mount4.h"

#include "log.h"
#include "dns.h"

#ifndef NFS_PORT
#define NFS_PORT 2049
#endif
#ifndef NFS_FHSIZE
#define NFS_FHSIZE 32
#endif

static char *nfs_strerror(int stat);

#define MAKE_VERSION(p,q,r)	(65536*(p) + 256*(q) + (r))

#define MAX_NFSPROT ((nfs_mount_version >= 4) ? 3 : 2)

bool_t
xdr_fhandle3 (XDR *xdrs, fhandle3 *objp)
{
	 if (!xdr_bytes (xdrs, (char **)&objp->fhandle3_val, (u_int *) &objp->fhandle3_len, FHSIZE3))
		 return FALSE;
	return TRUE;
}

bool_t
xdr_mountstat3 (XDR *xdrs, mountstat3 *objp)
{
	 if (!xdr_enum (xdrs, (enum_t *) objp))
		 return FALSE;
	return TRUE;
}

bool_t
xdr_mountres3_ok (XDR *xdrs, mountres3_ok *objp)
{
	 if (!xdr_fhandle3 (xdrs, &objp->fhandle))
		 return FALSE;
	 if (!xdr_array (xdrs, (char **)&objp->auth_flavours.auth_flavours_val, (u_int *) &objp->auth_flavours.auth_flavours_len, ~0,
		sizeof (int), (xdrproc_t) xdr_int))
		 return FALSE;
	return TRUE;
}

bool_t
xdr_mountres3 (XDR *xdrs, mountres3 *objp)
{
	 if (!xdr_mountstat3 (xdrs, &objp->fhs_status))
		 return FALSE;
	switch (objp->fhs_status) {
	case MNT_OK:
		 if (!xdr_mountres3_ok (xdrs, &objp->mountres3_u.mountinfo))
			 return FALSE;
		break;
	default:
		break;
	}
	return TRUE;
}

bool_t
xdr_dirpath (XDR *xdrs, dirpath *objp)
{
	 if (!xdr_string (xdrs, objp, MNTPATHLEN))
		 return FALSE;
	return TRUE;
}

bool_t
xdr_fhandle (XDR *xdrs, fhandle objp)
{
	 if (!xdr_opaque (xdrs, objp, FHSIZE))
		 return FALSE;
	return TRUE;
}

bool_t
xdr_fhstatus (XDR *xdrs, fhstatus *objp)
{
	 if (!xdr_u_int (xdrs, &objp->fhs_status))
		 return FALSE;
	switch (objp->fhs_status) {
	case 0:
		 if (!xdr_fhandle (xdrs, objp->fhstatus_u.fhs_fhandle))
			 return FALSE;
		break;
	default:
		break;
	}
	return TRUE;
}


static int
linux_version_code(void) {
	struct utsname my_utsname;
	int p, q, r;

	if (uname(&my_utsname) == 0) {
		p = atoi(strtok(my_utsname.release, "."));
		q = atoi(strtok(NULL, "."));
		r = atoi(strtok(NULL, "."));
		return MAKE_VERSION(p,q,r);
	}
	return 0;
}

/*
 * Unfortunately, the kernel prints annoying console messages
 * in case of an unexpected nfs mount version (instead of
 * just returning some error).  Therefore we'll have to try
 * and figure out what version the kernel expects.
 *
 * Variables:
 *	NFS_MOUNT_VERSION: these nfsmount sources at compile time
 *	nfs_mount_version: version this source and running kernel can handle
 */
static int
find_kernel_nfs_mount_version(void) {
	static int kernel_version = -1;
	int nfs_mount_version = NFS_MOUNT_VERSION;

	if (kernel_version == -1)
		kernel_version = linux_version_code();

	if (kernel_version) {
	     if (kernel_version < MAKE_VERSION(2,1,32))
		  nfs_mount_version = 1;
	     else if (kernel_version < MAKE_VERSION(2,2,18))
		  nfs_mount_version = 3;
	     else if (kernel_version < MAKE_VERSION(2,3,0))
		  nfs_mount_version = 4; /* since 2.2.18pre9 */
	     else if (kernel_version < MAKE_VERSION(2,3,99))
		  nfs_mount_version = 3;
	     else
		  nfs_mount_version = 4; /* since 2.3.99pre4 */
	}
	if (nfs_mount_version > NFS_MOUNT_VERSION)
	     nfs_mount_version = NFS_MOUNT_VERSION;
        log_message("nfsmount: kernel_nfs_mount_version: %d", nfs_mount_version);
	return nfs_mount_version;
}

static struct pmap *
get_mountport(struct sockaddr_in *server_addr,
      long unsigned prog,
      long unsigned version,
      long unsigned proto,
      long unsigned port,
      int nfs_mount_version)
{
	struct pmaplist *pmap;
	static struct pmap p = {0, 0, 0, 0};

	if (version > MAX_NFSPROT)
		version = MAX_NFSPROT;
	if (!prog)
		prog = MOUNTPROG;
	p.pm_prog = prog;
	p.pm_vers = version;
	p.pm_prot = proto;
	p.pm_port = port;

	server_addr->sin_port = PMAPPORT;
	pmap = pmap_getmaps(server_addr);

	while (pmap) {
		if (pmap->pml_map.pm_prog != prog)
			goto next;
		if (!version && p.pm_vers > pmap->pml_map.pm_vers)
			goto next;
		if (version > 2 && pmap->pml_map.pm_vers != version)
			goto next;
		if (version && version <= 2 && pmap->pml_map.pm_vers > 2)
			goto next;
		if (pmap->pml_map.pm_vers > MAX_NFSPROT ||
		    (proto && p.pm_prot && pmap->pml_map.pm_prot != proto) ||
		    (port && pmap->pml_map.pm_port != port))
			goto next;
		memcpy(&p, &pmap->pml_map, sizeof(p));
	next:
		pmap = pmap->pml_next;
	}
	if (!p.pm_vers)
		p.pm_vers = MOUNTVERS;
	if (!p.pm_prot)
		p.pm_prot = IPPROTO_TCP;
	return &p;
}



int nfsmount_prepare(const char *spec, char **mount_opts)
{
	char hostdir[1024];
	CLIENT *mclient;
	char *hostname, *dirname, *mounthost = NULL;
	struct timeval total_timeout;
	enum clnt_stat clnt_stat;
	static struct nfs_mount_data data;
	int nfs_mount_version;
	struct sockaddr_in server_addr;
	struct sockaddr_in mount_server_addr;
	struct pmap *pm_mnt;
	int msock, fsock;
	struct timeval retry_timeout;
	union {
		struct fhstatus nfsv2;
		struct mountres3 nfsv3;
	} status;
	char *s;
	int port, mountport, proto, soft, intr;
	int posix, nocto, noac, broken_suid, nolock;
	int tcp;
	int mountprog, mountvers, nfsprog, nfsvers;
	int retval;
	time_t t;
	time_t prevt;

	nfs_mount_version = find_kernel_nfs_mount_version();

	retval = -1;
	msock = fsock = -1;
	mclient = NULL;
	if (strlen(spec) >= sizeof(hostdir)) {
		log_message("nfsmount: excessively long host:dir argument");
		goto fail;
	}
	strcpy(hostdir, spec);
	if ((s = strchr(hostdir, ':'))) {
		hostname = hostdir;
		dirname = s + 1;
		*s = '\0';
	} else {
		log_message("nfsmount: directory to mount not in host:dir format");
		goto fail;
	}

	server_addr.sin_family = AF_INET;
#ifdef HAVE_inet_aton
	if (!inet_aton(hostname, &server_addr.sin_addr))
#endif
	{
		if (mygethostbyname(hostname, &server_addr.sin_addr)) {
			log_message("nfsmount: can't get address for %s", hostname);
			goto fail;
		}
	}

	memcpy (&mount_server_addr, &server_addr, sizeof (mount_server_addr));



	/* Set default options.
	 * rsize/wsize are set to 8192 to enable nfs install on
	 * old i586 machines
	 * timeo is filled in after we know whether it'll be TCP or UDP. */
	memset(&data, 0, sizeof(data));
	data.rsize	= 8192;
	data.wsize	= 8192;
	data.retrans	= 30;
	data.acregmin	= 3;
	data.acregmax	= 60;
	data.acdirmin	= 30;
	data.acdirmax	= 60;
#if NFS_MOUNT_VERSION >= 2
	data.namlen	= NAME_MAX;
#endif

	soft = 1;
	intr = 0;
	posix = 0;
	nocto = 0;
	nolock = 1;
	broken_suid = 0;
	noac = 0;
	tcp = 0;

	mountprog = MOUNTPROG;
	mountvers = 0;
	port = 0;
	mountport = 0;
	nfsprog = NFS_PROGRAM;
	nfsvers = 0;



retry_mount:
	proto = (tcp) ? IPPROTO_TCP : IPPROTO_UDP;

	data.flags = (soft ? NFS_MOUNT_SOFT : 0)
		| (intr ? NFS_MOUNT_INTR : 0)
		| (posix ? NFS_MOUNT_POSIX : 0)
		| (nocto ? NFS_MOUNT_NOCTO : 0)
		| (noac ? NFS_MOUNT_NOAC : 0);
#if NFS_MOUNT_VERSION >= 2
	if (nfs_mount_version >= 2)
		data.flags |= (tcp ? NFS_MOUNT_TCP : 0);
#endif
#if NFS_MOUNT_VERSION >= 3
	if (nfs_mount_version >= 3)
		data.flags |= (nolock ? NFS_MOUNT_NONLM : 0);
#endif
#if NFS_MOUNT_VERSION >= 4
	if (nfs_mount_version >= 4)
		data.flags |= (broken_suid ? NFS_MOUNT_BROKEN_SUID : 0);
#endif
	if (nfsvers > MAX_NFSPROT) {
		log_message("NFSv%d not supported!", nfsvers);
		return 0;
	}
	if (mountvers > MAX_NFSPROT) {
		log_message("NFSv%d not supported!", nfsvers);
		return 0;
	}
	if (nfsvers && !mountvers)
		mountvers = (nfsvers < 3) ? 1 : nfsvers;
	if (nfsvers && nfsvers < mountvers)
		mountvers = nfsvers;

	/* Adjust options if none specified */
	if (!data.timeo)
		data.timeo = tcp ? 70 : 7;

#ifdef NFS_MOUNT_DEBUG
	log_message("rsize = %d, wsize = %d, timeo = %d, retrans = %d",
	       data.rsize, data.wsize, data.timeo, data.retrans);
	log_message("acreg (min, max) = (%d, %d), acdir (min, max) = (%d, %d)",
	       data.acregmin, data.acregmax, data.acdirmin, data.acdirmax);
	log_message("port = %d, retry = %d, flags = %.8x",
	       port, retry, data.flags);
	log_message("mountprog = %d, mountvers = %d, nfsprog = %d, nfsvers = %d",
	       mountprog, mountvers, nfsprog, nfsvers);
	log_message("soft = %d, intr = %d, posix = %d, nocto = %d, noac = %d",
	       (data.flags & NFS_MOUNT_SOFT) != 0,
	       (data.flags & NFS_MOUNT_INTR) != 0,
	       (data.flags & NFS_MOUNT_POSIX) != 0,
	       (data.flags & NFS_MOUNT_NOCTO) != 0,
	       (data.flags & NFS_MOUNT_NOAC) != 0);
#if NFS_MOUNT_VERSION >= 2
	log_message("tcp = %d",
	       (data.flags & NFS_MOUNT_TCP) != 0);
#endif
#endif

	data.version = nfs_mount_version;
	*mount_opts = (char *) &data;


	/* create mount deamon client */
	/* See if the nfs host = mount host. */
	if (mounthost) {
		if (mounthost[0] >= '0' && mounthost[0] <= '9') {
			mount_server_addr.sin_family = AF_INET;
			mount_server_addr.sin_addr.s_addr = inet_addr(hostname);
		} else {
                        if (mygethostbyname(mounthost, &mount_server_addr.sin_addr)) {
				log_message("nfsmount: can't get address for %s", mounthost);
				goto fail;
			}
		}
	}

	/*
	 * The following loop implements the mount retries. On the first
	 * call, "running_bg" is 0. When the mount times out, and the
	 * "bg" option is set, the exit status EX_BG will be returned.
	 * For a backgrounded mount, there will be a second call by the
	 * child process with "running_bg" set to 1.
	 *
	 * The case where the mount point is not present and the "bg"
	 * option is set, is treated as a timeout. This is done to
	 * support nested mounts.
	 *
	 * The "retry" count specified by the user is the number of
	 * minutes to retry before giving up.
	 *
	 * Only the first error message will be displayed.
	 */
	retry_timeout.tv_sec = 3;
	retry_timeout.tv_usec = 0;
	total_timeout.tv_sec = 20;
	total_timeout.tv_usec = 0;
	prevt = 0;
	t = 30;


			/* be careful not to use too many CPU cycles */
			if (t - prevt < 30)
				sleep(30);

			pm_mnt = get_mountport(&mount_server_addr,
					       mountprog,
					       mountvers,
					       proto,
					       mountport,
					       nfs_mount_version);

			/* contact the mount daemon via TCP */
			mount_server_addr.sin_port = htons(pm_mnt->pm_port);
			msock = RPC_ANYSOCK;

			switch (pm_mnt->pm_prot) {
			case IPPROTO_UDP:
				mclient = clntudp_create(&mount_server_addr,
							 pm_mnt->pm_prog,
							 pm_mnt->pm_vers,
							 retry_timeout,
							 &msock);
				if (mclient)
					break;
				mount_server_addr.sin_port =
					htons(pm_mnt->pm_port);
				msock = RPC_ANYSOCK;
			case IPPROTO_TCP:
				mclient = clnttcp_create(&mount_server_addr,
							 pm_mnt->pm_prog,
							 pm_mnt->pm_vers,
							 &msock, 0, 0);
				break;
			default:
				mclient = 0;
			}

			if (mclient) {
				/* try to mount hostname:dirname */
				mclient->cl_auth = authunix_create_default();

				/* make pointers in xdr_mountres3 NULL so
				 * that xdr_array allocates memory for us
				 */
				memset(&status, 0, sizeof(status));

				log_message("nfsmount: doing client call in nfs version: %ld", pm_mnt->pm_vers);
				if (pm_mnt->pm_vers == 3)
					clnt_stat = clnt_call(mclient,
						     MOUNTPROC3_MNT,
						     (xdrproc_t) xdr_dirpath,
						     (caddr_t) &dirname,
						     (xdrproc_t) xdr_mountres3,
						     (caddr_t) &status,
						     total_timeout);
				else
					clnt_stat = clnt_call(mclient,
						     MOUNTPROC_MNT,
						     (xdrproc_t) xdr_dirpath,
						     (caddr_t) &dirname,
						     (xdrproc_t) xdr_fhstatus,
						     (caddr_t) &status,
						     total_timeout);

				if (clnt_stat == RPC_SUCCESS)
                                        goto succeeded;

                                if (prevt == 0)
                                        log_message("could not call server: probably protocol or version error");
                                auth_destroy(mclient->cl_auth);
                                clnt_destroy(mclient);
                                mclient = 0;
                                close(msock);
			} else {
                                log_message("could not create rpc client: host probably not found or NFS server is down");
			}
			prevt = t;

		        goto fail;

 succeeded:
	nfsvers = (pm_mnt->pm_vers < 2) ? 2 : pm_mnt->pm_vers;

	if (nfsvers == 2) {
		if (status.nfsv2.fhs_status != 0) {
			log_message("nfsmount: %s:%s failed, reason given by server: %s",
                                    hostname, dirname, nfs_strerror(status.nfsv2.fhs_status));
			goto fail;
		}
		memcpy(data.root.data,
		       (char *) status.nfsv2.fhstatus_u.fhs_fhandle,
		       NFS_FHSIZE);
#if NFS_MOUNT_VERSION >= 4
		data.root.size = NFS_FHSIZE;
		memcpy(data.old_root.data,
		       (char *) status.nfsv2.fhstatus_u.fhs_fhandle,
		       NFS_FHSIZE);
#endif
	} else {
#if NFS_MOUNT_VERSION >= 4
		fhandle3 *fhandle;
		if (status.nfsv3.fhs_status != 0) {
			log_message("nfsmount: %s:%s failed, reason given by server: %s",
                                    hostname, dirname, nfs_strerror(status.nfsv3.fhs_status));
			goto fail;
		}
		fhandle = &status.nfsv3.mountres3_u.mountinfo.fhandle;
		memset(data.old_root.data, 0, NFS_FHSIZE);
		memset(&data.root, 0, sizeof(data.root));
		data.root.size = fhandle->fhandle3_len;
		memcpy(data.root.data,
		       (char *) fhandle->fhandle3_val,
		       fhandle->fhandle3_len);

		data.flags |= NFS_MOUNT_VER3;
#endif
	}

	/* create nfs socket for kernel */

	if (tcp) {
		if (nfs_mount_version < 3) {
	     		log_message("NFS over TCP is not supported.");
			goto fail;
		}
		fsock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	} else
		fsock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	if (fsock < 0) {
		log_perror("nfs socket");
		goto fail;
	}
	if (bindresvport(fsock, 0) < 0) {
		log_perror("nfs bindresvport");
		goto fail;
	}
	if (port == 0) {
		server_addr.sin_port = PMAPPORT;
		port = pmap_getport(&server_addr, nfsprog, nfsvers,
				    tcp ? IPPROTO_TCP : IPPROTO_UDP);
#if 1
		/* Here we check to see if user is mounting with the
		 * tcp option.  If so, and if the portmap returns a
		 * '0' for port (service unavailable), we then notify
		 * the user, and retry with udp.
		 */
		if (port == 0 && tcp == 1) {
			log_message("NFS server reported TCP not available, retrying with UDP...");
			tcp = 0;
			goto retry_mount;
		}
#endif

		if (port == 0)
			port = NFS_PORT;
#ifdef NFS_MOUNT_DEBUG
		else
			log_message("used portmapper to find NFS port");
#endif
	}
#ifdef NFS_MOUNT_DEBUG
	log_message("using port %d for nfs deamon", port);
#endif
	server_addr.sin_port = htons(port);
	/*
	 * connect() the socket for kernels 1.3.10 and below only,
	 * to avoid problems with multihomed hosts.
	 * --Swen
	 */
	if (linux_version_code() <= 66314
	    && connect(fsock, (struct sockaddr *) &server_addr,
		       sizeof (server_addr)) < 0) {
		log_perror("nfs connect");
		goto fail;
	}

	/* prepare data structure for kernel */

	data.fd = fsock;
	memcpy((char *) &data.addr, (char *) &server_addr, sizeof(data.addr));