[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
Re: [gftp] site chgrp
søn, 2003-09-21 kl. 13:14 skrev Niels Andersen:
> I'd like to see support for "site chgrp" in gFTP.
I don't know much C, and GTK is worse. But I tried making chgrp work
anyway. This is how far I could get, I don't know if it is any help. :)
Notes:
lib/local.c: local_chgrp should be created
src/gtk/misc-gtk.c: Increased some numbers to make room for chgrp, I
have no idea if it's right
./src/gtk/chgrp_dialog.c: I've just change "chmod" to "chgrp" a few
places, the real work still needs to be done.
/lib/sshv2.c: Not changed, should also support chgrp.
Test-results:
If I right-click on a file on an ftp-server, "Chmod..." is grey.
If I right-click on a file on an ftp-server and select "Chgrp..." I get
the message "Chgrp: This feature is not available using this protocol"
A patch is attached.
If I spent a lot more time on it, I should be able to make a better
patch. But I think that at least one person on this list should be able
to complete it in a lot less time. ;-)
--
Mvh.
Niels Andersen
diff -r -u gftp-2.0.15.orig/lib/bookmark.c gftp-2.0.15/lib/bookmark.c
--- gftp-2.0.15.orig/lib/bookmark.c 2003-09-21 17:48:44.000000000 +0200
+++ gftp-2.0.15/lib/bookmark.c 2003-09-21 18:40:16.000000000 +0200
@@ -80,6 +80,7 @@
request->mkdir = NULL;
request->rename = NULL;
request->chmod = NULL;
+ request->chgrp = NULL;
request->set_file_time = NULL;
request->site = NULL;
request->parse_url = bookmark_parse_url;
diff -r -u gftp-2.0.15.orig/lib/gftp.h gftp-2.0.15/lib/gftp.h
--- gftp-2.0.15.orig/lib/gftp.h 2003-09-21 17:48:44.000000000 +0200
+++ gftp-2.0.15/lib/gftp.h 2003-09-21 18:21:37.000000000 +0200
@@ -415,6 +415,9 @@
int (*chmod) ( gftp_request * request,
const char *filename,
int mode );
+ int (*chgrp) ( gftp_request * request,
+ const char *filename,
+ const char *group );
int (*set_file_time) ( gftp_request * request,
const char *filename,
time_t datettime );
@@ -864,6 +867,10 @@
const char *file,
int mode );
+int gftp_chgrp ( gftp_request * request,
+ const char *file,
+ const char *group );
+
int gftp_set_file_time ( gftp_request * request,
const char *file,
time_t datetime );
diff -r -u gftp-2.0.15.orig/lib/protocols.c gftp-2.0.15/lib/protocols.c
--- gftp-2.0.15.orig/lib/protocols.c 2003-09-21 17:48:44.000000000 +0200
+++ gftp-2.0.15/lib/protocols.c 2003-09-21 18:21:53.000000000 +0200
@@ -851,6 +851,17 @@
int
+gftp_chgrp (gftp_request * request, const char *file, const char *group)
+{
+ g_return_val_if_fail (request != NULL, GFTP_EFATAL);
+
+ if (request->chgrp == NULL)
+ return (GFTP_EFATAL);
+ return (request->chgrp (request, file, group));
+}
+
+
+int
gftp_set_file_time (gftp_request * request, const char *file, time_t datetime)
{
g_return_val_if_fail (request != NULL, GFTP_EFATAL);
diff -r -u gftp-2.0.15.orig/lib/rfc2068.c gftp-2.0.15/lib/rfc2068.c
--- gftp-2.0.15.orig/lib/rfc2068.c 2003-09-21 17:48:44.000000000 +0200
+++ gftp-2.0.15/lib/rfc2068.c 2003-09-21 18:27:32.000000000 +0200
@@ -902,6 +902,7 @@
request->mkdir = NULL;
request->rename = NULL;
request->chmod = NULL;
+ request->chgrp = NULL;
request->site = NULL;
request->parse_url = NULL;
request->swap_socks = NULL;
diff -r -u gftp-2.0.15.orig/lib/rfc959.c gftp-2.0.15/lib/rfc959.c
--- gftp-2.0.15.orig/lib/rfc959.c 2003-09-21 17:48:44.000000000 +0200
+++ gftp-2.0.15/lib/rfc959.c 2003-09-21 18:26:05.000000000 +0200
@@ -1592,6 +1592,30 @@
static int
+rfc959_chgrp (gftp_request * request, const char *file, const char *group)
+{
+ char *tempstr, ret;
+
+ g_return_val_if_fail (request != NULL, GFTP_EFATAL);
+ g_return_val_if_fail (request->protonum == GFTP_FTP_NUM, GFTP_EFATAL);
+ g_return_val_if_fail (file != NULL, GFTP_EFATAL);
+ g_return_val_if_fail (request->datafd > 0, GFTP_EFATAL);
+
+ tempstr = g_malloc (strlen (file) + strlen(group) + 16);
+ sprintf (tempstr, "SITE CHGRP %s %s\r\n", group, file);
+ ret = rfc959_send_command (request, tempstr);
+ g_free (tempstr);
+
+ if (ret < 0)
+ return (ret);
+ else if (ret == '2')
+ return (0);
+ else
+ return (GFTP_ERETRYABLE);
+}
+
+
+static int
rfc959_site (gftp_request * request, const char *command)
{
char *tempstr, ret;
diff -r -u gftp-2.0.15.orig/src/gtk/Makefile gftp-2.0.15/src/gtk/Makefile
--- gftp-2.0.15.orig/src/gtk/Makefile 2003-09-21 17:48:44.000000000 +0200
+++ gftp-2.0.15/src/gtk/Makefile 2003-09-21 18:06:01.000000000 +0200
@@ -112,7 +112,7 @@
bin_PROGRAMS = gftp-gtk
EXTRA_PROGRAMS = gftp-gtk
-gftp_gtk_SOURCES = bookmarks.c chmod_dialog.c delete_dialog.c dnd.c gftp-gtk.c menu-items.c misc-gtk.c mkdir_dialog.c options_dialog.c rename_dialog.c transfer.c view_dialog.c
+gftp_gtk_SOURCES = bookmarks.c chmod_dialog.c chgrp_dialog.c delete_dialog.c dnd.c gftp-gtk.c menu-items.c misc-gtk.c mkdir_dialog.c options_dialog.c rename_dialog.c transfer.c view_dialog.c
INCLUDES = -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/X11R6/include -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -D_REENTRANT -DSHARE_DIR=\"$(datadir)/gftp\" -DLOCALE_DIR=\"$(localedir)\" -I../../intl
LDADD = ../../lib/libgftp.a -Wl,--export-dynamic -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangoxft-1.0 -lpangox-1.0 -lpango-1.0 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0 -lpthread -lutil -lnsl -lm -lgthread-2.0 -lcrypto -lssl
@@ -129,7 +129,7 @@
CPPFLAGS =
LDFLAGS =
LIBS =
-gftp_gtk_OBJECTS = bookmarks.o chmod_dialog.o delete_dialog.o dnd.o \
+gftp_gtk_OBJECTS = bookmarks.o chmod_dialog.o chgrp_dialog.o delete_dialog.o dnd.o \
gftp-gtk.o menu-items.o misc-gtk.o mkdir_dialog.o options_dialog.o \
rename_dialog.o transfer.o view_dialog.o
gftp_gtk_LDADD = $(LDADD)
diff -r -u gftp-2.0.15.orig/src/gtk/Makefile.am gftp-2.0.15/src/gtk/Makefile.am
--- gftp-2.0.15.orig/src/gtk/Makefile.am 2003-09-21 17:48:44.000000000 +0200
+++ gftp-2.0.15/src/gtk/Makefile.am 2003-09-21 18:05:15.000000000 +0200
@@ -2,7 +2,7 @@
bin_PROGRAMS = @GFTP_GTK@
EXTRA_PROGRAMS = gftp-gtk
-gftp_gtk_SOURCES = bookmarks.c chmod_dialog.c delete_dialog.c dnd.c \
+gftp_gtk_SOURCES = bookmarks.c chmod_dialog.c chgrp_dialog.c delete_dialog.c dnd.c \
gftp-gtk.c menu-items.c misc-gtk.c mkdir_dialog.c \
options_dialog.c rename_dialog.c transfer.c view_dialog.c
INCLUDES = @GTK_CFLAGS@ @PTHREAD_CFLAGS@ -DSHARE_DIR=\"$(datadir)/gftp\" -DLOCALE_DIR=\"$(localedir)\" -I../../intl
diff -r -u gftp-2.0.15.orig/src/gtk/Makefile.in gftp-2.0.15/src/gtk/Makefile.in
--- gftp-2.0.15.orig/src/gtk/Makefile.in 2003-09-21 17:48:44.000000000 +0200
+++ gftp-2.0.15/src/gtk/Makefile.in 2003-09-21 18:05:50.000000000 +0200
@@ -112,7 +112,7 @@
bin_PROGRAMS = @GFTP_GTK@
EXTRA_PROGRAMS = gftp-gtk
-gftp_gtk_SOURCES = bookmarks.c chmod_dialog.c delete_dialog.c dnd.c gftp-gtk.c menu-items.c misc-gtk.c mkdir_dialog.c options_dialog.c rename_dialog.c transfer.c view_dialog.c
+gftp_gtk_SOURCES = bookmarks.c chmod_dialog.c chgrp_dialog.c delete_dialog.c dnd.c gftp-gtk.c menu-items.c misc-gtk.c mkdir_dialog.c options_dialog.c rename_dialog.c transfer.c view_dialog.c
INCLUDES = @GTK_CFLAGS@ @PTHREAD_CFLAGS@ -DSHARE_DIR=\"$(datadir)/gftp\" -DLOCALE_DIR=\"$(localedir)\" -I../../intl
LDADD = ../../lib/libgftp.a @GTK_LIBS@ @PTHREAD_LIBS@ @EXTRA_LIBS@ @GTHREAD_LIBS@ @SSL_LIBS@
@@ -129,7 +129,7 @@
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
-gftp_gtk_OBJECTS = bookmarks.o chmod_dialog.o delete_dialog.o dnd.o \
+gftp_gtk_OBJECTS = bookmarks.o chmod_dialog.o chgrp_dialog.o delete_dialog.o dnd.o \
gftp-gtk.o menu-items.o misc-gtk.o mkdir_dialog.o options_dialog.o \
rename_dialog.o transfer.o view_dialog.o
gftp_gtk_LDADD = $(LDADD)
diff -r -u gftp-2.0.15.orig/src/gtk/gftp-gtk.c gftp-2.0.15/src/gtk/gftp-gtk.c
--- gftp-2.0.15.orig/src/gtk/gftp-gtk.c 2003-09-21 17:48:44.000000000 +0200
+++ gftp-2.0.15/src/gtk/gftp-gtk.c 2003-09-21 18:12:13.000000000 +0200
@@ -184,6 +184,7 @@
{N_("/Local/Send SITE Command..."), NULL, site_dialog, 0, MN_(NULL)},
{N_("/Local/Change Directory"), NULL, chfunc, 0, MN_(NULL)},
{N_("/Local/Chmod..."), NULL, chmod_dialog, 0, MN_(NULL)},
+ {N_("/Local/Chgrp..."), NULL, chgrp_dialog, 0, MN_(NULL)},
{N_("/Local/Make Directory..."), NULL, mkdir_dialog, 0, MN_(NULL)},
{N_("/Local/Rename..."), NULL, rename_dialog, 0, MN_(NULL)},
{N_("/Local/Delete..."), NULL, delete_dialog, 0, MN_(NULL)},
@@ -207,6 +208,7 @@
{N_("/Remote/Send SITE Command..."), NULL, site_dialog, 0, MN_(NULL)},
{N_("/Remote/Change Directory"), NULL, chfunc, 0, MN_(NULL)},
{N_("/Remote/Chmod..."), NULL, chmod_dialog, 0, MN_(NULL)},
+ {N_("/Remote/Chgrp..."), NULL, chgrp_dialog, 0, MN_(NULL)},
{N_("/Remote/Make Directory..."), NULL, mkdir_dialog, 0, MN_(NULL)},
{N_("/Remote/Rename..."), NULL, rename_dialog, 0, MN_(NULL)},
{N_("/Remote/Delete..."), NULL, delete_dialog, 0, MN_(NULL)},
diff -r -u gftp-2.0.15.orig/src/gtk/gftp-gtk.h gftp-2.0.15/src/gtk/gftp-gtk.h
--- gftp-2.0.15.orig/src/gtk/gftp-gtk.h 2003-09-21 17:48:44.000000000 +0200
+++ gftp-2.0.15/src/gtk/gftp-gtk.h 2003-09-21 18:12:54.000000000 +0200
@@ -187,6 +187,9 @@
/* chmod_dialog.c */
void chmod_dialog ( gpointer data );
+/* chgrp_dialog.c */
+void chgrp_dialog ( gpointer data );
+
/* delete_dialog.c */
void delete_dialog ( gpointer data );
diff -r -u gftp-2.0.15.orig/src/gtk/misc-gtk.c gftp-2.0.15/src/gtk/misc-gtk.c
--- gftp-2.0.15.orig/src/gtk/misc-gtk.c 2003-09-21 17:48:44.000000000 +0200
+++ gftp-2.0.15/src/gtk/misc-gtk.c 2003-09-21 18:49:51.000000000 +0200
@@ -348,17 +348,19 @@
set_menu_sensitive (wdata, menus[start + 14].path, connected &&
wdata->request->chmod != NULL);
set_menu_sensitive (wdata, menus[start + 15].path, connected &&
- wdata->request->mkdir != NULL);
+ wdata->request->chgrp != NULL); // I've increased the numbers in the next few lines, I have no idea if that's correct.
set_menu_sensitive (wdata, menus[start + 16].path, connected &&
- wdata->request->rename != NULL);
+ wdata->request->mkdir != NULL);
set_menu_sensitive (wdata, menus[start + 17].path, connected &&
+ wdata->request->rename != NULL);
+ set_menu_sensitive (wdata, menus[start + 18].path, connected &&
wdata->request->rmdir != NULL &&
wdata->request->rmfile != NULL);
- set_menu_sensitive (wdata, menus[start + 18].path, connected &&
- wdata->request->get_file != NULL);
set_menu_sensitive (wdata, menus[start + 19].path, connected &&
wdata->request->get_file != NULL);
- set_menu_sensitive (wdata, menus[start + 20].path, connected);
+ set_menu_sensitive (wdata, menus[start + 20].path, connected &&
+ wdata->request->get_file != NULL);
+ set_menu_sensitive (wdata, menus[start + 21].path, connected);
}
diff -r -u gftp-2.0.15.orig/src/text/gftp-text.c gftp-2.0.15/src/text/gftp-text.c
--- gftp-2.0.15.orig/src/text/gftp-text.c 2003-09-21 17:48:45.000000000 +0200
+++ gftp-2.0.15/src/text/gftp-text.c 2003-09-21 18:55:31.000000000 +0200
@@ -38,6 +38,8 @@
N_("Changes the remote working directory"), NULL},
{N_("chmod"), 3, gftp_text_chmod, &gftp_text_remreq,
N_("Changes the permissions of a remote file"), NULL},
+ {N_("chgrp"), 3, gftp_text_chgrp, &gftp_text_remreq,
+ N_("Changes the group of a remote file"), NULL},
{N_("clear"), 3, gftp_text_clear, NULL,
N_("Available options: cache"), gftp_text_clear_show_subhelp},
{N_("close"), 3, gftp_text_close, &gftp_text_remreq,
@@ -54,6 +56,8 @@
N_("Changes the local working directory"), NULL},
{N_("lchmod"), 4, gftp_text_chmod, &gftp_text_locreq,
N_("Changes the permissions of a local file"), NULL},
+ {N_("lchgrp"), 4, gftp_text_chmod, &gftp_text_locreq,
+ N_("Changes the group of a local file"), NULL},
{N_("ldelete"), 2, gftp_text_delete, &gftp_text_locreq,
N_("Removes a local file"), NULL},
{N_("lls"), 2, gftp_text_ls, &gftp_text_locreq,
@@ -591,6 +595,34 @@
int
+gftp_text_chgrp (gftp_request * request, char *command, gpointer *data)
+{
+ char *pos;
+
+ if (!GFTP_IS_CONNECTED (request))
+ {
+ gftp_text_log (gftp_logging_error, request,
+ _("Error: Not connected to a remote site\n"));
+ return (1);
+ }
+
+ if ((pos = strchr (command, ' ')) != NULL)
+ *pos++ = '\0';
+
+ if (*command == '\0' || pos == NULL || *pos == '\0')
+ {
+ gftp_text_log (gftp_logging_error, request,
+ _("usage: chgrp <group> <file>\n"));
+ }
+ else
+ {
+ gftp_chgrp (request, pos, command);
+ }
+ return (1);
+}
+
+
+int
gftp_text_ls (gftp_request * request, char *command, gpointer *data)
{
GList * files, * templist, * delitem;
diff -r -u gftp-2.0.15.orig/src/text/gftp-text.h gftp-2.0.15/src/text/gftp-text.h
--- gftp-2.0.15.orig/src/text/gftp-text.h 2003-09-21 17:48:45.000000000 +0200
+++ gftp-2.0.15/src/text/gftp-text.h 2003-09-21 18:51:57.000000000 +0200
@@ -87,6 +87,9 @@
int gftp_text_chmod ( gftp_request * request,
char *command,
gpointer *data);
+int gftp_text_chgrp ( gftp_request * request,
+ char *command,
+ gpointer *data);
int gftp_text_ls ( gftp_request * request,
char *command,
gpointer *data);