[Samba] problem with smbc_init in libsmbclient

Razvan roti at ss.pub.ro
Thu Nov 28 14:24:00 GMT 2002


Hi,

I have attached a very simple c program, that first does a smbc_init and
then a smbc_opendir. The problem: smbc_init return an error (No such file
or directory) and then i get a segmentation fault. I don't know what
possibly could be the problem. Maybe some of you guys have an idea. I
think i have libsmbclient from samba 2.2.7(compiled on my own system) and
the rest of the samba stuff is the one that comes with mandrake 8.2. 

Thanks,
Razvan Rotaru


-------------- next part --------------
/* 
   Unix SMB/Netbios implementation.
   Version 2.0
   SMB client library test program
   Copyright (C) Andrew Tridgell 1998
   Copyright (C) Richard Sharpe 2000
   Copyright (C) John Terpsra 2000
   
   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 of the License, 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.
   
   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.
*/

#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <libsmbclient.h>


void auth_fn(const char *server, const char *share,
	     char *workgroup, int wgmaxlen, char *username, int unmaxlen,
	     char *password, int pwmaxlen)
{
  char temp[128];

  fprintf(stdout, "Need password for //%s/%s\n", server, share);

  fprintf(stdout, "Enter workgroup: [%s] ", workgroup);
  fgets(temp, sizeof(temp), stdin);

  if (temp[strlen(temp) - 1] == 0x0a) /* A new line? */
    temp[strlen(temp) - 1] = 0x00;

  if (temp[0]) strncpy(workgroup, temp, wgmaxlen - 1);

  fprintf(stdout, "Enter username: [%s] ", username);
  fgets(temp, sizeof(temp), stdin);

  if (temp[strlen(temp) - 1] == 0x0a) /* A new line? */
    temp[strlen(temp) - 1] = 0x00;

  if (temp[0]) strncpy(username, temp, unmaxlen - 1);

  fprintf(stdout, "Enter password: [%s] ", password);
  fgets(temp, sizeof(temp), stdin);

  if (temp[strlen(temp) - 1] == 0x0a) /* A new line? */
    temp[strlen(temp) - 1] = 0x00;

  if (temp[0]) strncpy(password, temp, pwmaxlen - 1);

}



int main(int argc, char *argv[])
{
int err, fd, dh;
//char dirbuf[512];
//char *dirp;
struct stat st1, st2;
struct smbc_dirent dirp[128];
char path[]="smb://cherban/";


err = smbc_init(auth_fn,  10);
if (err < 0) {
	fprintf(stderr, "Initializing the smbclient library : %s\n", strerror(errno));
}


dh=smbc_opendir(path);
if (dh <0) {
	fprintf(stderr, "Could not open directory: %s: %s\n",path,strerror(errno));
	exit(1);
}


    /* Now, list those directories, but in funny ways ... */

/*    if ((dirc = smbc_getdents(dh1,dirp,sizeof(struct smbc_dirent)*128)) < 0) {

      fprintf(stderr, "Problems getting directory entries: %s\n",
	      strerror(errno));

      exit(1);

    }
*/
    /* Now, process the list of names ... */

/*    fprintf(stdout, "Directory listing, size = %u\n", dirc);

    while (dirc > 0) {

      dsize = ((struct smbc_dirent *)dirp)->dirlen;
      fprintf(stdout, "Dir Ent, Type: %u, Name: %s, Comment: %s\n",
	      ((struct smbc_dirent *)dirp)->smbc_type, 
	      ((struct smbc_dirent *)dirp)->name, 
	      ((struct smbc_dirent *)dirp)->comment);

      dirp += dsize;
      (char *)dirc -= dsize;

    }

*/
  return 0;
}


More information about the samba mailing list