summaryrefslogtreecommitdiff
path: root/usr/src/lib/libsmbfs
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libsmbfs')
-rw-r--r--usr/src/lib/libsmbfs/Makefile.com1
-rw-r--r--usr/src/lib/libsmbfs/netsmb/smb_netshareenum.h18
-rw-r--r--usr/src/lib/libsmbfs/netsmb/smbfs_api.h4
-rw-r--r--usr/src/lib/libsmbfs/smb/file.c4
-rw-r--r--usr/src/lib/libsmbfs/smb/llib-lsmbfs1
-rw-r--r--usr/src/lib/libsmbfs/smb/mapfile-vers1
-rw-r--r--usr/src/lib/libsmbfs/smb/netshareenum.c378
7 files changed, 4 insertions, 403 deletions
diff --git a/usr/src/lib/libsmbfs/Makefile.com b/usr/src/lib/libsmbfs/Makefile.com
index 0521eba951..8f8b118128 100644
--- a/usr/src/lib/libsmbfs/Makefile.com
+++ b/usr/src/lib/libsmbfs/Makefile.com
@@ -59,7 +59,6 @@ OBJ_LIB=\
nb_ssn.o \
nbns_rq.o \
negprot.o \
- netshareenum.o \
newvc.o \
nls.o \
ntlm.o \
diff --git a/usr/src/lib/libsmbfs/netsmb/smb_netshareenum.h b/usr/src/lib/libsmbfs/netsmb/smb_netshareenum.h
deleted file mode 100644
index 14f2594df7..0000000000
--- a/usr/src/lib/libsmbfs/netsmb/smb_netshareenum.h
+++ /dev/null
@@ -1,18 +0,0 @@
-
-#ifndef _NETSMB_SMB_NETSHAREENUM_H_
-#define _NETSMB_SMB_NETSHAREENUM_H_
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-/* This is from Apple. See ../smb/netshareenum.c */
-
-struct share_info {
- uint16_t type;
- char *netname;
- char *remark;
-};
-typedef struct share_info share_info_t;
-
-int smb_netshareenum(struct smb_ctx *, int *, int *, struct share_info **);
-
-#endif /* _NETSMB_SMB_NETSHAREENUM_H_ */
diff --git a/usr/src/lib/libsmbfs/netsmb/smbfs_api.h b/usr/src/lib/libsmbfs/netsmb/smbfs_api.h
index 8436318b4c..b1f4b1e198 100644
--- a/usr/src/lib/libsmbfs/netsmb/smbfs_api.h
+++ b/usr/src/lib/libsmbfs/netsmb/smbfs_api.h
@@ -140,8 +140,8 @@ typedef void (*smb_ctx_close_hook_t)(struct smb_ctx *);
void smb_ctx_set_close_hook(smb_ctx_close_hook_t);
int smb_fh_close(int);
int smb_fh_open(struct smb_ctx *ctx, const char *, int);
-int smb_fh_read(int, off_t, size_t, char *);
-int smb_fh_write(int, off_t, size_t, const char *);
+int smb_fh_read(int, off64_t, size_t, char *);
+int smb_fh_write(int, off64_t, size_t, const char *);
int smb_fh_xactnp(int, int, const char *,
int *, char *, int *);
int smb_fh_getssnkey(int, uchar_t *, size_t);
diff --git a/usr/src/lib/libsmbfs/smb/file.c b/usr/src/lib/libsmbfs/smb/file.c
index 1c09532d61..8ca9d2cee1 100644
--- a/usr/src/lib/libsmbfs/smb/file.c
+++ b/usr/src/lib/libsmbfs/smb/file.c
@@ -204,7 +204,7 @@ smb_fh_open(struct smb_ctx *ctx, const char *path, int oflag)
}
int
-smb_fh_read(int fd, off_t offset, size_t count,
+smb_fh_read(int fd, off64_t offset, size_t count,
char *dst)
{
struct smbioc_rw rwrq;
@@ -221,7 +221,7 @@ smb_fh_read(int fd, off_t offset, size_t count,
}
int
-smb_fh_write(int fd, off_t offset, size_t count,
+smb_fh_write(int fd, off64_t offset, size_t count,
const char *src)
{
struct smbioc_rw rwrq;
diff --git a/usr/src/lib/libsmbfs/smb/llib-lsmbfs b/usr/src/lib/libsmbfs/smb/llib-lsmbfs
index 1096482541..7459db63be 100644
--- a/usr/src/lib/libsmbfs/smb/llib-lsmbfs
+++ b/usr/src/lib/libsmbfs/smb/llib-lsmbfs
@@ -34,7 +34,6 @@
#include <netsmb/smb_lib.h>
#include <netsmb/smb_keychain.h>
-#include <netsmb/smb_netshareenum.h>
#include <netsmb/smb_rap.h>
#include <netsmb/spnego.h>
diff --git a/usr/src/lib/libsmbfs/smb/mapfile-vers b/usr/src/lib/libsmbfs/smb/mapfile-vers
index 24bffec63d..68b38f46ed 100644
--- a/usr/src/lib/libsmbfs/smb/mapfile-vers
+++ b/usr/src/lib/libsmbfs/smb/mapfile-vers
@@ -111,7 +111,6 @@ SYMBOL_VERSION SUNWprivate {
smb_iod_start;
smb_iod_work;
smb_lib_init;
- smb_netshareenum; # will move to libnetapi
smb_open_printer;
smb_open_rcfile;
smb_simplecrypt;
diff --git a/usr/src/lib/libsmbfs/smb/netshareenum.c b/usr/src/lib/libsmbfs/smb/netshareenum.c
deleted file mode 100644
index af5a0bb9bd..0000000000
--- a/usr/src/lib/libsmbfs/smb/netshareenum.c
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * Copyright (c) 2004 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_LICENSE_HEADER_START@
- *
- * "Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
- * Reserved. This file contains Original Code and/or Modifications of
- * Original Code as defined in and that are subject to the Apple Public
- * Source License Version 1.0 (the 'License'). You may not use this file
- * except in compliance with the License. Please obtain a copy of the
- * License at http://www.apple.com/publicsource and read it before using
- * this file.
- *
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
- * License for the specific language governing rights and limitations
- * under the License."
- *
- * @APPLE_LICENSE_HEADER_END@
- */
-
-/* BEGIN CSTYLED */
-/*
- * @(#)ui.c *
- * (c) 2004 Apple Computer, Inc. All Rights Reserved
- *
- *
- * netshareenum.c -- Routines for getting a list of share information
- * from a server.
- *
- * MODIFICATION HISTORY:
- * 27-Nov-2004 Guy Harris New today
- */
-/* END CSTYLED */
-
-/*
- * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <errno.h>
-
-#include <netsmb/mchain.h>
-#include <netsmb/smb.h>
-#include <netsmb/smb_lib.h>
-#include <netsmb/smb_rap.h>
-#include <netsmb/smb_netshareenum.h>
-#include <smb/charsets.h>
-
-#if 0 /* XXX see below */
-#include <dce/exc_handling.h>
-#include <rpc/attrb.h>
-#include "srvsvc.h"
-#endif
-
-/*
- * Don't want RPC client-side code in here.
- * It's good code; just doesn't belong here.
- *
- * The API provided by this library should be
- * just files and pipes (and not much more).
- * It MAY be useful to provide some of the
- * RAP (remote API) functions functions like
- * rap_netshareenum below...
- *
- * XXX: Not sure this file belongs here at all.
- * smb_rap.h looks like a reasonable API
- * for this library to export.
- */
-#if 0 /* XXX */
-
-static int
-rpc_netshareenum(struct smb_ctx *ctx, int *entriesp, int *totalp,
- struct share_info **entries_listp)
-{
- char ctx_string[2+16+1]; /* enough for 64-bit pointer, in hex */
- unsigned_char_p_t binding;
- unsigned32 binding_status;
- rpc_binding_handle_t binding_h;
- int error, i, entries;
- char *addrstr, *srvnamestr;
- unsigned short *usrvnamestr;
- unsigned32 level;
- SHARE_ENUM_STRUCT share_info;
- SHARE_INFO_1_CONTAINER share_info_1_container;
- SHARE_INFO_1 *shares, *share;
- unsigned32 total_entries;
- unsigned32 status, free_status;
- struct share_info *entry_list, *elp;
- static EXCEPTION rpc_x_connect_rejected;
- static int exceptions_initialized;
-
- sprintf(ctx_string, "%p", ctx);
- rpc_string_binding_compose(NULL, "ncacn_np", ctx_string,
- "srvsvc", NULL, &binding, &binding_status);
- if (binding_status != rpc_s_ok) {
- smb_error(dgettext(TEXT_DOMAIN,
- "rpc_string_binding_compose failed with %d"),
- 0, binding_status);
- return (EINVAL);
- }
- rpc_binding_from_string_binding(binding, &binding_h, &status);
- rpc_string_free(&binding, (unsigned32 *)&free_status);
- if (binding_status != rpc_s_ok) {
- smb_error(dgettext(TEXT_DOMAIN,
- "rpc_binding_from_string_binding failed with %d"), 0,
- binding_status);
- return (EINVAL);
- }
- level = 1;
- share_info.share_union.level = 1;
- share_info.share_union.tagged_union.share1 = &share_info_1_container;
- share_info_1_container.share_count = 0;
- share_info_1_container.shares = NULL;
- /*
- * Convert the server IP address to a string, and send that as
- * the "server name" - that's what Windows appears to do, and
- * that avoids problems with NetBIOS names containing
- * non-ASCII characters.
- */
- addrstr = inet_ntoa(ctx->ct_srvinaddr.sin_addr);
- srvnamestr = malloc(strlen(addrstr) + 3);
- if (srvnamestr == NULL) {
- status = errno;
- smb_error(dgettext(TEXT_DOMAIN,
- "can't allocate string for server address"), status);
- rpc_binding_free(&binding_h, &free_status);
- return (status);
- }
- strcpy(srvnamestr, "\\\\");
- strcat(srvnamestr, addrstr);
- usrvnamestr = convert_utf8_to_leunicode(srvnamestr);
- if (usrvnamestr == NULL) {
- smb_error(dgettext(TEXT_DOMAIN,
- "can't convert string for server address to Unicode"), 0);
- rpc_binding_free(&binding_h, &free_status);
- free(srvnamestr);
- return (EINVAL);
- }
- if (!exceptions_initialized) {
- EXCEPTION_INIT(rpc_x_connect_rejected);
- exc_set_status(&rpc_x_connect_rejected, rpc_s_connect_rejected);
- exceptions_initialized = 1;
- }
- /* printf("Calling NetrShareEnum.."); XXX */
- TRY
- status = NetrShareEnum(binding_h, usrvnamestr, &level,
- &share_info, 4294967295U, &total_entries, NULL);
- if (status != 0)
- smb_error(dgettext(TEXT_DOMAIN,
- "error from NetrShareEnum call: status = 0x%08x"),
- 0, status);
- /*CSTYLED*/
- CATCH (rpc_x_connect_rejected)
- /*
- * This is what we get if we can't open the pipe.
- * That's a normal occurrence when we're talking
- * to a system that (presumably) doesn't support
- * DCE RPC on the server side, such as Windows 95/98/Me,
- * so we don't log an error.
- */
- /*CSTYLED*/
- status = ENOTSUP;
- CATCH_ALL
- /*
- * XXX - should we handle some exceptions differently,
- * returning different errors, and try RAP only for
- * ENOTSUP?
- */
- smb_error(dgettext(TEXT_DOMAIN,
- "error from NetrShareEnum call: exception = %u"),
- 0, THIS_CATCH->match.value);
- status = ENOTSUP;
- ENDTRY
- rpc_binding_free(&binding_h, &free_status);
- free(srvnamestr);
- free(usrvnamestr);
- if (status != 0)
- return (ENOTSUP);
-
- /*
- * XXX - if the IDL is correct, it's not clear whether the
- * unmarshalling code will properly handle the case where
- * a packet where "share_count" and the max count for the
- * array of shares don't match; a valid DCE RPC implementation
- * won't marshal something like that, but there's no guarantee
- * that the server we're talking to has a valid implementation
- * (which could be a *malicious* implementation!).
- */
- entries = share_info.share_union.tagged_union.share1->share_count;
- shares = share_info.share_union.tagged_union.share1->shares;
- entry_list = calloc(entries, sizeof (struct share_info));
- if (entry_list == NULL) {
- error = errno;
- goto cleanup_and_return;
- }
- for (share = shares, elp = entry_list, i = 0; i < entries;
- i++, share++) {
- elp->type = share->shi1_type;
- elp->netname = convert_unicode_to_utf8(share->shi1_share);
- if (elp->netname == NULL)
- goto fail;
- elp->remark = convert_unicode_to_utf8(share->shi1_remark);
- if (elp->remark == NULL)
- goto fail;
- elp++;
- }
- *entriesp = entries;
- *totalp = total_entries;
- *entries_listp = entry_list;
- error = 0;
- goto cleanup_and_return;
-
-fail:
- error = errno;
- for (elp = entry_list, i = 0; i < entries; i++, elp++) {
- /*
- * elp->netname is set before elp->remark, so if
- * elp->netname is null, elp->remark is also null.
- * If either of them is null, we haven't done anything
- * to any entries after this one.
- */
- if (elp->netname == NULL)
- break;
- free(elp->netname);
- if (elp->remark == NULL)
- break;
- free(elp->remark);
- }
- free(entry_list);
-
-cleanup_and_return:
- for (share = shares, i = 0; i < entries; i++, share++) {
- free(share->shi1_share);
- free(share->shi1_remark);
- }
- free(shares);
- /*
- * XXX - "share1" should be a unique pointer, but we haven't
- * changed the marshalling code to support non-full pointers
- * in unions, so we leave it as a full pointer.
- *
- * That means that this might, or might not, be changed from
- * pointing to "share_info_1_container" to pointing to a
- * mallocated structure, according to the DCE RPC 1.1 IDL spec;
- * we free it only if it's changed.
- */
- if (share_info.share_union.tagged_union.share1 !=
- &share_info_1_container)
- free(share_info.share_union.tagged_union.share1);
- return (error);
-}
-#endif /* XXX */
-
-/*
- * Enumerate shares using RAP
- */
-
-struct smb_share_info_1 {
- char shi1_netname[13];
- char shi1_pad;
- uint16_t shi1_type;
- uint32_t shi1_remark; /* char * */
-};
-
-static int
-smb_rap_NetShareEnum(struct smb_ctx *ctx, int sLevel, void *pbBuffer,
- int *cbBuffer, int *pcEntriesRead, int *pcTotalAvail)
-{
- struct smb_rap *rap;
- long lval = -1;
- int error;
-
- error = smb_rap_create(0, "WrLeh", "B13BWz", &rap);
- if (error)
- return (error);
- (void) smb_rap_setNparam(rap, sLevel); /* W - sLevel */
- (void) smb_rap_setPparam(rap, pbBuffer); /* r - pbBuffer */
- (void) smb_rap_setNparam(rap, *cbBuffer); /* L - cbBuffer */
- error = smb_rap_request(rap, ctx);
- if (error == 0) {
- *pcEntriesRead = rap->r_entries;
- error = smb_rap_getNparam(rap, &lval);
- *pcTotalAvail = lval;
- /* Copy the data length into the IN/OUT variable. */
- *cbBuffer = rap->r_rcvbuflen;
- }
- error = smb_rap_error(rap, error);
- smb_rap_done(rap);
- return (error);
-}
-
-static int
-rap_netshareenum(struct smb_ctx *ctx, int *entriesp, int *totalp,
- struct share_info **entries_listp)
-{
- int error, bufsize, i, entries, total, nreturned;
- struct smb_share_info_1 *rpbuf, *ep;
- struct share_info *entry_list, *elp;
- char *cp;
- int lbound, rbound;
-
- bufsize = 0xffe0; /* samba notes win2k bug for 65535 */
- rpbuf = malloc(bufsize);
- if (rpbuf == NULL)
- return (errno);
-
- error = smb_rap_NetShareEnum(ctx, 1, rpbuf, &bufsize, &entries, &total);
- if (error &&
- error != (ERROR_MORE_DATA | SMB_RAP_ERROR)) {
- free(rpbuf);
- return (error);
- }
- entry_list = malloc(entries * sizeof (struct share_info));
- if (entry_list == NULL) {
- error = errno;
- free(rpbuf);
- return (error);
- }
- lbound = entries * (sizeof (struct smb_share_info_1));
- rbound = bufsize;
- for (ep = rpbuf, elp = entry_list, i = 0, nreturned = 0; i < entries;
- i++, ep++) {
- elp->type = letohs(ep->shi1_type);
- ep->shi1_pad = '\0'; /* ensure null termination */
- elp->netname = convert_wincs_to_utf8(ep->shi1_netname);
- if (elp->netname == NULL)
- continue; /* punt on this entry */
- /*
- * Check for validity of offset.
- */
- if (ep->shi1_remark >= lbound && ep->shi1_remark < rbound) {
- cp = (char *)rpbuf + ep->shi1_remark;
- elp->remark = convert_wincs_to_utf8(cp);
- } else
- elp->remark = NULL;
- elp++;
- nreturned++;
- }
- *entriesp = nreturned;
- *totalp = total;
- *entries_listp = entry_list;
- free(rpbuf);
- return (0);
-}
-
-/*
- * First we try the RPC-based NetrShareEnum, and, if that fails, we fall
- * back on the RAP-based NetShareEnum.
- */
-int
-smb_netshareenum(struct smb_ctx *ctx, int *entriesp, int *totalp,
- struct share_info **entry_listp)
-{
- int error;
-
-#ifdef NOTYETDEFINED
- /*
- * Try getting a list of shares with the SRVSVC RPC service.
- */
- error = rpc_netshareenum(ctx, entriesp, totalp, entry_listp);
- if (error == 0)
- return (0);
-#endif
-
- /*
- * OK, that didn't work - try RAP.
- * XXX - do so only if it failed because we couldn't open
- * the pipe?
- */
- error = rap_netshareenum(ctx, entriesp, totalp, entry_listp);
- return (error);
-}