2004-07-12 20:35:48 +04:00
/*
Unix SMB / CIFS implementation .
RAP handlers
Copyright ( C ) Volker Lendecke 2004
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
2007-07-10 06:07:03 +04:00
the Free Software Foundation ; either version 3 of the License , or
2004-07-12 20:35:48 +04:00
( 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 .
You should have received a copy of the GNU General Public License
2007-07-10 06:07:03 +04:00
along with this program . If not , see < http : //www.gnu.org/licenses/>.
2004-07-12 20:35:48 +04:00
*/
# include "includes.h"
2006-07-23 22:43:07 +04:00
# include "param/share.h"
2010-04-26 17:41:17 +04:00
# include "../librpc/gen_ndr/rap.h"
2009-01-30 02:39:30 +03:00
# include "libcli/raw/interfaces.h"
2006-03-16 03:23:11 +03:00
# include "librpc/gen_ndr/srvsvc.h"
2010-10-30 04:33:53 +04:00
# include "librpc/gen_ndr/dcerpc.h"
2006-03-07 14:07:23 +03:00
# include "rpc_server/common/common.h"
2010-10-21 10:12:31 +04:00
# include "rpc_server/common/share.h"
2007-12-10 20:41:55 +03:00
# include "param/param.h"
2008-10-20 20:59:51 +04:00
# include "ntvfs/ipc/ipc.h"
# include "ntvfs/ipc/proto.h"
2004-07-12 20:35:48 +04:00
/* At this moment these are just dummy functions, but you might get the
* idea . */
2006-03-10 17:31:17 +03:00
NTSTATUS rap_netshareenum ( TALLOC_CTX * mem_ctx ,
2008-12-29 22:24:57 +03:00
struct tevent_context * event_ctx ,
2008-01-06 04:03:43 +03:00
struct loadparm_context * lp_ctx ,
2004-07-12 20:35:48 +04:00
struct rap_NetShareEnum * r )
{
2006-07-23 22:43:07 +04:00
NTSTATUS nterr ;
const char * * snames ;
struct share_context * sctx ;
struct share_config * scfg ;
int i , j , count ;
2004-07-12 20:35:48 +04:00
r - > out . status = 0 ;
2006-07-23 22:43:07 +04:00
r - > out . available = 0 ;
r - > out . info = NULL ;
2010-07-16 08:32:42 +04:00
nterr = share_get_context_by_name ( mem_ctx , lpcfg_share_backend ( lp_ctx ) , event_ctx , lp_ctx , & sctx ) ;
2006-07-23 22:43:07 +04:00
if ( ! NT_STATUS_IS_OK ( nterr ) ) {
return nterr ;
}
nterr = share_list_all ( mem_ctx , sctx , & count , & snames ) ;
if ( ! NT_STATUS_IS_OK ( nterr ) ) {
return nterr ;
}
r - > out . available = count ;
2006-03-10 17:31:17 +03:00
r - > out . info = talloc_array ( mem_ctx ,
2010-04-27 00:06:47 +04:00
union rap_share_info , r - > out . available ) ;
2004-07-12 20:35:48 +04:00
2006-07-23 22:43:07 +04:00
for ( i = 0 , j = 0 ; i < r - > out . available ; i + + ) {
2018-05-15 18:55:22 +03:00
size_t sname_len ;
2006-07-23 22:43:07 +04:00
if ( ! NT_STATUS_IS_OK ( share_get_config ( mem_ctx , sctx , snames [ i ] , & scfg ) ) ) {
DEBUG ( 3 , ( " WARNING: Service [%s] disappeared after enumeration! \n " , snames [ i ] ) ) ;
continue ;
}
2018-05-15 18:55:22 +03:00
/* Make sure we have NUL-termination */
sname_len = MIN ( strlen ( snames [ i ] ) ,
sizeof ( r - > out . info [ j ] . info1 . share_name ) ) ;
strlcpy ( ( char * ) r - > out . info [ j ] . info1 . share_name ,
2006-07-23 22:43:07 +04:00
snames [ i ] ,
2018-05-15 18:55:22 +03:00
sname_len ) ;
2010-04-27 00:06:47 +04:00
r - > out . info [ i ] . info1 . reserved1 = 0 ;
r - > out . info [ i ] . info1 . share_type = dcesrv_common_get_share_type ( mem_ctx , NULL , scfg ) ;
2014-01-17 01:16:12 +04:00
r - > out . info [ i ] . info1 . comment = share_string_option ( mem_ctx , scfg , SHARE_COMMENT , " " ) ;
2006-07-23 22:43:07 +04:00
talloc_free ( scfg ) ;
j + + ;
2004-12-19 06:31:57 +03:00
}
2006-07-23 22:43:07 +04:00
r - > out . available = j ;
2004-07-12 20:35:48 +04:00
return NT_STATUS_OK ;
}
2006-03-10 17:31:17 +03:00
NTSTATUS rap_netserverenum2 ( TALLOC_CTX * mem_ctx ,
2008-01-06 04:03:43 +03:00
struct loadparm_context * lp_ctx ,
2006-03-10 17:31:17 +03:00
struct rap_NetServerEnum2 * r )
2004-07-12 20:35:48 +04:00
{
r - > out . status = 0 ;
r - > out . available = 0 ;
return NT_STATUS_OK ;
}