~jm-leddy/ubuntu/oneiric/gvfs/fix-899858

« back to all changes in this revision

Viewing changes to daemon/gvfsbackendsmb.c

  • Committer: Bazaar Package Importer
  • Author(s): Sebastien Bacher
  • Date: 2008-06-04 17:05:29 UTC
  • mfrom: (1.1.21 upstream)
  • Revision ID: james.westby@ubuntu.com-20080604170529-w2qdknt7btbjt6j3
Tags: 0.99.1-0ubuntu1
* New upstream version:
  - Fix directory copy/delete problems
  - Fuse daemon robustness fixes
  - Allow mounting non-standard ISO images
  - Better username/domain tests on mount spec
  - Require gphoto >= 2.4.0
  - Fix strdup()/g_free() confusion
  - Use consistent translatable strings for mount and volume
  - Plug some memory leaks
  - Many smaller bug fixes
  - Translation updates
* debian/control.in:
  - updated libgphoto requirement
  - updated maintainer information
* debian/patches/90_from_svn_runtime_samba_debug.patch:
  - dropped, fixed in the new version

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
#include <unistd.h>
29
29
#include <fcntl.h>
30
30
#include <string.h>
 
31
#include <stdlib.h>
31
32
 
32
33
#include <glib/gstdio.h>
33
34
#include <glib/gi18n.h>
457
458
  char *uri;
458
459
  int res;
459
460
  char *display_name;
 
461
  const char *debug;
 
462
  int debug_val;
460
463
  GMountSpec *smb_mount_spec;
461
464
  smbc_stat_fn smbc_stat;
462
465
 
470
473
    }
471
474
  smbc_setOptionUserData (smb_context, backend);
472
475
 
473
 
  smbc_setDebug (smb_context, 0);
 
476
  debug = g_getenv ("GVFS_SMB_DEBUG");
 
477
  if (debug)
 
478
    debug_val = atoi (debug);
 
479
  else
 
480
    debug_val = 0;
 
481
 
 
482
  smbc_setDebug (smb_context, debug_val);
474
483
  smbc_setFunctionAuthDataWithContext (smb_context, auth_callback);
475
484
  
476
485
  smbc_setFunctionAddCachedServer (smb_context, add_cached_server);
506
515
 
507
516
  op_backend->smb_context = smb_context;
508
517
 
509
 
  /* Translators: This is "<sharename> on <servername>" and is used as name for an SMB share */
510
 
  display_name = g_strdup_printf (_("%s on %s"), op_backend->share, op_backend->server);
511
 
  g_vfs_backend_set_display_name (backend, display_name);
512
 
  g_free (display_name);
513
 
  g_vfs_backend_set_icon_name (backend, "folder-remote");
514
 
  
515
 
  smb_mount_spec = g_mount_spec_new ("smb-share");
516
 
  g_mount_spec_set (smb_mount_spec, "share", op_backend->share);
517
 
  g_mount_spec_set (smb_mount_spec, "server", op_backend->server);
518
 
  if (op_backend->user)
519
 
    g_mount_spec_set (smb_mount_spec, "user", op_backend->user);
520
 
  if (op_backend->domain)
521
 
    g_mount_spec_set (smb_mount_spec, "domain", op_backend->domain);
522
 
  
523
 
  g_vfs_backend_set_mount_spec (backend, smb_mount_spec);
524
 
  g_mount_spec_unref (smb_mount_spec);
525
 
 
526
518
  uri = create_smb_uri (op_backend->server, op_backend->share, NULL);
527
519
 
528
520
  op_backend->mount_source = mount_source;
559
551
      return;
560
552
    }
561
553
 
 
554
  /* Mount was successful */
 
555
 
 
556
  /* Translators: This is "<sharename> on <servername>" and is used as name for an SMB share */
 
557
  display_name = g_strdup_printf (_("%s on %s"), op_backend->share, op_backend->server);
 
558
  g_vfs_backend_set_display_name (backend, display_name);
 
559
  g_free (display_name);
 
560
  g_vfs_backend_set_icon_name (backend, "folder-remote");
 
561
 
 
562
  smb_mount_spec = g_mount_spec_new ("smb-share");
 
563
  g_mount_spec_set (smb_mount_spec, "share", op_backend->share);
 
564
  g_mount_spec_set (smb_mount_spec, "server", op_backend->server);
 
565
  if (op_backend->last_user && strlen(op_backend->last_user) > 0)
 
566
    {
 
567
      g_mount_spec_set (smb_mount_spec, "user", op_backend->last_user);
 
568
      if (op_backend->last_domain)
 
569
        g_mount_spec_set (smb_mount_spec, "domain", op_backend->last_domain);
 
570
    }
 
571
 
 
572
  g_vfs_backend_set_mount_spec (backend, smb_mount_spec);
 
573
  g_mount_spec_unref (smb_mount_spec);
 
574
 
562
575
  g_vfs_keyring_save_password (op_backend->last_user,
563
576
                               op_backend->server,
564
577
                               op_backend->last_domain,
612
625
  GVfsBackendSmb *op_backend = G_VFS_BACKEND_SMB (backend);
613
626
  char *uri;
614
627
  SMBCFILE *file;
 
628
  struct stat st;
615
629
  smbc_open_fn smbc_open;
 
630
  smbc_stat_fn smbc_stat;
 
631
  int res;
 
632
  int olderr;
 
633
 
616
634
 
617
635
  uri = create_smb_uri (op_backend->server, op_backend->share, filename);
618
636
  smbc_open = smbc_getFunctionOpen (op_backend->smb_context);
619
637
  file = smbc_open (op_backend->smb_context, uri, O_RDONLY, 0);
620
 
  g_free (uri);
621
638
 
622
639
  if (file == NULL)
623
 
    g_vfs_job_failed_from_errno (G_VFS_JOB (job), errno);
 
640
    {
 
641
      olderr = errno;
 
642
      smbc_stat = smbc_getFunctionStat (op_backend->smb_context);
 
643
      res = smbc_stat (op_backend->smb_context, uri, &st);
 
644
      g_free (uri);
 
645
      if ((res == 0) && (S_ISDIR (st.st_mode)))
 
646
            g_vfs_job_failed (G_VFS_JOB (job),
 
647
                              G_IO_ERROR, G_IO_ERROR_IS_DIRECTORY,
 
648
                             _("Can't open directory"));
 
649
      else
 
650
        g_vfs_job_failed_from_errno (G_VFS_JOB (job), olderr);
 
651
  }
624
652
  else
625
653
    {
 
654
      
626
655
      g_vfs_job_open_for_read_set_can_seek (job, TRUE);
627
656
      g_vfs_job_open_for_read_set_handle (job, file);
628
657
      g_vfs_job_succeeded (G_VFS_JOB (job));