diff --git a/content/Makefile.dep b/content/Makefile.dep index 2598aef..9d1aab5 100755 --- a/content/Makefile.dep +++ b/content/Makefile.dep @@ -5,29 +5,29 @@ adduser.o: ../templates/patterncacher.h ../templates/misc.h adduser.o: ../templates/localefilter.h ../core/locale.h adduser.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h adduser.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -adduser.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -adduser.o: ../core/session.h ../core/item.h ../core/error.h ../core/log.h -adduser.o: ../core/user.h ../core/rebus.h ../core/function.h ../core/thread.h -adduser.o: ../core/compress.h ../core/acceptencodingparser.h -adduser.o: ../core/acceptbaseparser.h ../core/htmlfilter.h -adduser.o: ../core/postmultiparser.h ../core/ticket.h ../core/data.h -adduser.o: ../core/dirs.h ../core/dircontainer.h ../core/users.h -adduser.o: ../core/ugcontainer.h ../core/groups.h ../core/group.h +adduser.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +adduser.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +adduser.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h +adduser.o: ../core/request.h ../core/requesttypes.h ../core/session.h +adduser.o: ../core/rebus.h ../core/function.h ../core/compress.h +adduser.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h +adduser.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/data.h +adduser.o: ../core/dirs.h ../core/users.h ../core/groups.h adduser.o: ../core/functions.h ../core/lastcontainer.h ../core/mounts.h -adduser.o: ../core/mount.h ../core/loadavg.h ../core/db.h +adduser.o: ../core/mount.h ../core/loadavg.h cat.o: content.h ../core/item.h ../templates/templates.h cat.o: ../templates/patterncacher.h ../templates/misc.h cat.o: ../templates/localefilter.h ../core/locale.h cat.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h cat.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -cat.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -cat.o: ../core/session.h ../core/item.h ../core/error.h ../core/log.h -cat.o: ../core/user.h ../core/rebus.h ../core/function.h ../core/thread.h -cat.o: ../core/compress.h ../core/acceptencodingparser.h -cat.o: ../core/acceptbaseparser.h ../core/htmlfilter.h -cat.o: ../core/postmultiparser.h ../core/ticket.h ../core/error.h -cat.o: ../core/data.h ../core/dirs.h ../core/dircontainer.h ../core/users.h -cat.o: ../core/ugcontainer.h ../core/groups.h ../core/group.h +cat.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +cat.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +cat.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h +cat.o: ../core/request.h ../core/requesttypes.h ../core/session.h +cat.o: ../core/rebus.h ../core/function.h ../core/compress.h +cat.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h +cat.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/error.h +cat.o: ../core/data.h ../core/dirs.h ../core/users.h ../core/groups.h cat.o: ../core/functions.h ../core/lastcontainer.h ../core/mounts.h cat.o: ../core/mount.h ../core/loadavg.h content.o: content.h ../core/item.h ../templates/templates.h @@ -35,31 +35,30 @@ content.o: ../templates/patterncacher.h ../templates/misc.h content.o: ../templates/localefilter.h ../core/locale.h content.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h content.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -content.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -content.o: ../core/session.h ../core/item.h ../core/error.h ../core/log.h -content.o: ../core/user.h ../core/rebus.h ../core/function.h ../core/thread.h -content.o: ../core/compress.h ../core/acceptencodingparser.h -content.o: ../core/acceptbaseparser.h ../core/htmlfilter.h -content.o: ../core/postmultiparser.h ../core/ticket.h ../core/error.h -content.o: ../core/db.h ../core/group.h ../core/dircontainer.h -content.o: ../core/ugcontainer.h ../core/data.h ../core/dirs.h -content.o: ../core/users.h ../core/groups.h ../core/functions.h -content.o: ../core/lastcontainer.h ../core/mounts.h ../core/mount.h -content.o: ../core/loadavg.h ../core/misc.h ../core/plugin.h +content.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +content.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +content.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h +content.o: ../core/request.h ../core/requesttypes.h ../core/session.h +content.o: ../core/rebus.h ../core/function.h ../core/compress.h +content.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h +content.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/error.h +content.o: ../core/data.h ../core/dirs.h ../core/users.h ../core/groups.h +content.o: ../core/functions.h ../core/lastcontainer.h ../core/mounts.h +content.o: ../core/mount.h ../core/loadavg.h ../core/misc.h ../core/plugin.h content.o: ../core/request.h ../core/data.h ../core/pluginmsg.h createthread.o: content.h ../core/item.h ../templates/templates.h createthread.o: ../templates/patterncacher.h ../templates/misc.h createthread.o: ../templates/localefilter.h ../core/locale.h createthread.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h createthread.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h +createthread.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +createthread.o: ../core/group.h ../core/thread.h ../core/error.h +createthread.o: ../core/log.h ../core/dircontainer.h ../core/ugcontainer.h createthread.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -createthread.o: ../core/session.h ../core/item.h ../core/error.h -createthread.o: ../core/log.h ../core/user.h ../core/rebus.h -createthread.o: ../core/function.h ../core/thread.h ../core/compress.h -createthread.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h -createthread.o: ../core/htmlfilter.h ../core/postmultiparser.h -createthread.o: ../core/ticket.h ../core/error.h ../core/db.h ../core/group.h -createthread.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/mount.h +createthread.o: ../core/session.h ../core/rebus.h ../core/function.h +createthread.o: ../core/compress.h ../core/acceptencodingparser.h +createthread.o: ../core/acceptbaseparser.h ../core/htmlfilter.h +createthread.o: ../core/postmultiparser.h ../core/error.h ../core/mount.h createthread.o: ../core/data.h ../core/dirs.h ../core/users.h createthread.o: ../core/groups.h ../core/functions.h ../core/lastcontainer.h createthread.o: ../core/mounts.h ../core/mount.h ../core/loadavg.h @@ -68,14 +67,14 @@ createticket.o: ../templates/patterncacher.h ../templates/misc.h createticket.o: ../templates/localefilter.h ../core/locale.h createticket.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h createticket.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h +createticket.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +createticket.o: ../core/group.h ../core/thread.h ../core/error.h +createticket.o: ../core/log.h ../core/dircontainer.h ../core/ugcontainer.h createticket.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -createticket.o: ../core/session.h ../core/item.h ../core/error.h -createticket.o: ../core/log.h ../core/user.h ../core/rebus.h -createticket.o: ../core/function.h ../core/thread.h ../core/compress.h -createticket.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h -createticket.o: ../core/htmlfilter.h ../core/postmultiparser.h -createticket.o: ../core/ticket.h ../core/error.h ../core/db.h ../core/group.h -createticket.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/mount.h +createticket.o: ../core/session.h ../core/rebus.h ../core/function.h +createticket.o: ../core/compress.h ../core/acceptencodingparser.h +createticket.o: ../core/acceptbaseparser.h ../core/htmlfilter.h +createticket.o: ../core/postmultiparser.h ../core/error.h ../core/mount.h createticket.o: ../core/data.h ../core/dirs.h ../core/users.h createticket.o: ../core/groups.h ../core/functions.h ../core/lastcontainer.h createticket.o: ../core/mounts.h ../core/mount.h ../core/loadavg.h @@ -84,63 +83,61 @@ default.o: ../templates/patterncacher.h ../templates/misc.h default.o: ../templates/localefilter.h ../core/locale.h default.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h default.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -default.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -default.o: ../core/session.h ../core/item.h ../core/error.h ../core/log.h -default.o: ../core/user.h ../core/rebus.h ../core/function.h ../core/thread.h -default.o: ../core/compress.h ../core/acceptencodingparser.h -default.o: ../core/acceptbaseparser.h ../core/htmlfilter.h -default.o: ../core/postmultiparser.h ../core/ticket.h ../core/error.h -default.o: ../core/db.h ../core/group.h ../core/dircontainer.h -default.o: ../core/ugcontainer.h ../core/data.h ../core/dirs.h -default.o: ../core/users.h ../core/groups.h ../core/functions.h -default.o: ../core/lastcontainer.h ../core/mounts.h ../core/mount.h -default.o: ../core/loadavg.h +default.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +default.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +default.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h +default.o: ../core/request.h ../core/requesttypes.h ../core/session.h +default.o: ../core/rebus.h ../core/function.h ../core/compress.h +default.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h +default.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/error.h +default.o: ../core/data.h ../core/dirs.h ../core/users.h ../core/groups.h +default.o: ../core/functions.h ../core/lastcontainer.h ../core/mounts.h +default.o: ../core/mount.h ../core/loadavg.h download.o: content.h ../core/item.h ../templates/templates.h download.o: ../templates/patterncacher.h ../templates/misc.h download.o: ../templates/localefilter.h ../core/locale.h download.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h download.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -download.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -download.o: ../core/session.h ../core/item.h ../core/error.h ../core/log.h -download.o: ../core/user.h ../core/rebus.h ../core/function.h -download.o: ../core/thread.h ../core/compress.h +download.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +download.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +download.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h +download.o: ../core/request.h ../core/requesttypes.h ../core/session.h +download.o: ../core/rebus.h ../core/function.h ../core/compress.h download.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h -download.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/ticket.h -download.o: ../core/data.h ../core/dirs.h ../core/dircontainer.h -download.o: ../core/users.h ../core/ugcontainer.h ../core/groups.h -download.o: ../core/group.h ../core/functions.h ../core/lastcontainer.h -download.o: ../core/mounts.h ../core/mount.h ../core/loadavg.h +download.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/data.h +download.o: ../core/dirs.h ../core/users.h ../core/groups.h +download.o: ../core/functions.h ../core/lastcontainer.h ../core/mounts.h +download.o: ../core/mount.h ../core/loadavg.h editticket.o: content.h ../core/item.h ../templates/templates.h editticket.o: ../templates/patterncacher.h ../templates/misc.h editticket.o: ../templates/localefilter.h ../core/locale.h editticket.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h editticket.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -editticket.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -editticket.o: ../core/session.h ../core/item.h ../core/error.h ../core/log.h -editticket.o: ../core/user.h ../core/rebus.h ../core/function.h -editticket.o: ../core/thread.h ../core/compress.h +editticket.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +editticket.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +editticket.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h +editticket.o: ../core/request.h ../core/requesttypes.h ../core/session.h +editticket.o: ../core/rebus.h ../core/function.h ../core/compress.h editticket.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h -editticket.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/ticket.h -editticket.o: ../core/error.h ../core/db.h ../core/group.h -editticket.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/mount.h -editticket.o: ../core/data.h ../core/dirs.h ../core/users.h ../core/groups.h -editticket.o: ../core/functions.h ../core/lastcontainer.h ../core/mounts.h -editticket.o: ../core/mount.h ../core/loadavg.h +editticket.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/error.h +editticket.o: ../core/mount.h ../core/data.h ../core/dirs.h ../core/users.h +editticket.o: ../core/groups.h ../core/functions.h ../core/lastcontainer.h +editticket.o: ../core/mounts.h ../core/mount.h ../core/loadavg.h emacs.o: content.h ../core/item.h ../templates/templates.h emacs.o: ../templates/patterncacher.h ../templates/misc.h emacs.o: ../templates/localefilter.h ../core/locale.h emacs.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h emacs.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -emacs.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -emacs.o: ../core/session.h ../core/item.h ../core/error.h ../core/log.h -emacs.o: ../core/user.h ../core/rebus.h ../core/function.h ../core/thread.h -emacs.o: ../core/compress.h ../core/acceptencodingparser.h -emacs.o: ../core/acceptbaseparser.h ../core/htmlfilter.h -emacs.o: ../core/postmultiparser.h ../core/ticket.h ../core/error.h -emacs.o: ../core/db.h ../core/group.h ../core/dircontainer.h -emacs.o: ../core/ugcontainer.h ../core/data.h ../core/dirs.h ../core/users.h -emacs.o: ../core/groups.h ../core/functions.h ../core/lastcontainer.h -emacs.o: ../core/mounts.h ../core/mount.h ../core/loadavg.h ../core/notify.h +emacs.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +emacs.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +emacs.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h +emacs.o: ../core/request.h ../core/requesttypes.h ../core/session.h +emacs.o: ../core/rebus.h ../core/function.h ../core/compress.h +emacs.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h +emacs.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/error.h +emacs.o: ../core/data.h ../core/dirs.h ../core/users.h ../core/groups.h +emacs.o: ../core/functions.h ../core/lastcontainer.h ../core/mounts.h +emacs.o: ../core/mount.h ../core/loadavg.h ../core/notify.h emacs.o: ../templatesnotify/templatesnotify.h ../core/mount.h emacs.o: ../templates/misc.h ../core/misc.h last.o: content.h ../core/item.h ../templates/templates.h @@ -148,207 +145,230 @@ last.o: ../templates/patterncacher.h ../templates/misc.h last.o: ../templates/localefilter.h ../core/locale.h last.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h last.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -last.o: ../core/ticket.h +last.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +last.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +last.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h login.o: content.h ../core/item.h ../templates/templates.h login.o: ../templates/patterncacher.h ../templates/misc.h login.o: ../templates/localefilter.h ../core/locale.h login.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h login.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -login.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -login.o: ../core/session.h ../core/item.h ../core/error.h ../core/log.h -login.o: ../core/user.h ../core/rebus.h ../core/function.h ../core/thread.h -login.o: ../core/compress.h ../core/acceptencodingparser.h -login.o: ../core/acceptbaseparser.h ../core/htmlfilter.h -login.o: ../core/postmultiparser.h ../core/ticket.h ../core/error.h -login.o: ../core/db.h ../core/group.h ../core/dircontainer.h -login.o: ../core/ugcontainer.h ../core/data.h ../core/dirs.h ../core/users.h -login.o: ../core/groups.h ../core/functions.h ../core/lastcontainer.h -login.o: ../core/mounts.h ../core/mount.h ../core/loadavg.h +login.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +login.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +login.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h +login.o: ../core/request.h ../core/requesttypes.h ../core/session.h +login.o: ../core/rebus.h ../core/function.h ../core/compress.h +login.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h +login.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/error.h +login.o: ../core/data.h ../core/dirs.h ../core/users.h ../core/groups.h +login.o: ../core/functions.h ../core/lastcontainer.h ../core/mounts.h +login.o: ../core/mount.h ../core/loadavg.h logout.o: content.h ../core/item.h ../templates/templates.h logout.o: ../templates/patterncacher.h ../templates/misc.h logout.o: ../templates/localefilter.h ../core/locale.h logout.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h logout.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -logout.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -logout.o: ../core/session.h ../core/item.h ../core/error.h ../core/log.h -logout.o: ../core/user.h ../core/rebus.h ../core/function.h ../core/thread.h -logout.o: ../core/compress.h ../core/acceptencodingparser.h -logout.o: ../core/acceptbaseparser.h ../core/htmlfilter.h -logout.o: ../core/postmultiparser.h ../core/ticket.h ../core/data.h -logout.o: ../core/dirs.h ../core/dircontainer.h ../core/users.h -logout.o: ../core/ugcontainer.h ../core/groups.h ../core/group.h -logout.o: ../core/functions.h ../core/lastcontainer.h ../core/mounts.h -logout.o: ../core/mount.h ../core/loadavg.h +logout.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +logout.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +logout.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h +logout.o: ../core/request.h ../core/requesttypes.h ../core/session.h +logout.o: ../core/rebus.h ../core/function.h ../core/compress.h +logout.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h +logout.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/data.h +logout.o: ../core/dirs.h ../core/users.h ../core/groups.h ../core/functions.h +logout.o: ../core/lastcontainer.h ../core/mounts.h ../core/mount.h +logout.o: ../core/loadavg.h ls.o: content.h ../core/item.h ../templates/templates.h ls.o: ../templates/patterncacher.h ../templates/misc.h ls.o: ../templates/localefilter.h ../core/locale.h ../confparser/confparser.h ls.o: ../templates/ckeditorgetparser.h ../core/httpsimpleparser.h -ls.o: ../core/log.h ../core/thread.h ../core/ticket.h ../core/request.h -ls.o: ../core/requesttypes.h ../core/session.h ../core/item.h ../core/error.h -ls.o: ../core/log.h ../core/user.h ../core/rebus.h ../core/function.h -ls.o: ../core/thread.h ../core/compress.h ../core/acceptencodingparser.h +ls.o: ../core/log.h ../core/thread.h ../core/ticket.h ../core/db.h +ls.o: ../core/item.h ../core/user.h ../core/group.h ../core/thread.h +ls.o: ../core/error.h ../core/log.h ../core/dircontainer.h +ls.o: ../core/ugcontainer.h ../core/ticket.h ../core/request.h +ls.o: ../core/requesttypes.h ../core/session.h ../core/rebus.h +ls.o: ../core/function.h ../core/compress.h ../core/acceptencodingparser.h ls.o: ../core/acceptbaseparser.h ../core/htmlfilter.h -ls.o: ../core/postmultiparser.h ../core/ticket.h ../core/db.h ../core/group.h -ls.o: ../core/dircontainer.h ../core/ugcontainer.h +ls.o: ../core/postmultiparser.h misc_item.o: content.h ../core/item.h ../templates/templates.h misc_item.o: ../templates/patterncacher.h ../templates/misc.h misc_item.o: ../templates/localefilter.h ../core/locale.h misc_item.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h misc_item.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -misc_item.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -misc_item.o: ../core/session.h ../core/item.h ../core/error.h ../core/log.h -misc_item.o: ../core/user.h ../core/rebus.h ../core/function.h -misc_item.o: ../core/thread.h ../core/compress.h +misc_item.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +misc_item.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +misc_item.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h +misc_item.o: ../core/request.h ../core/requesttypes.h ../core/session.h +misc_item.o: ../core/rebus.h ../core/function.h ../core/compress.h misc_item.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h -misc_item.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/ticket.h -misc_item.o: ../core/misc.h ../core/db.h ../core/group.h -misc_item.o: ../core/dircontainer.h ../core/ugcontainer.h +misc_item.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/misc.h misc_specialfile.o: content.h ../core/item.h ../templates/templates.h misc_specialfile.o: ../templates/patterncacher.h ../templates/misc.h misc_specialfile.o: ../templates/localefilter.h ../core/locale.h misc_specialfile.o: ../confparser/confparser.h misc_specialfile.o: ../templates/ckeditorgetparser.h misc_specialfile.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -misc_specialfile.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -misc_specialfile.o: ../core/session.h ../core/item.h ../core/error.h -misc_specialfile.o: ../core/log.h ../core/user.h ../core/rebus.h -misc_specialfile.o: ../core/function.h ../core/thread.h ../core/compress.h +misc_specialfile.o: ../core/ticket.h ../core/db.h ../core/item.h +misc_specialfile.o: ../core/user.h ../core/group.h ../core/thread.h +misc_specialfile.o: ../core/error.h ../core/log.h ../core/dircontainer.h +misc_specialfile.o: ../core/ugcontainer.h ../core/ticket.h ../core/request.h +misc_specialfile.o: ../core/requesttypes.h ../core/session.h ../core/rebus.h +misc_specialfile.o: ../core/function.h ../core/compress.h misc_specialfile.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h misc_specialfile.o: ../core/htmlfilter.h ../core/postmultiparser.h -misc_specialfile.o: ../core/ticket.h ../core/data.h ../core/dirs.h -misc_specialfile.o: ../core/dircontainer.h ../core/users.h -misc_specialfile.o: ../core/ugcontainer.h ../core/groups.h ../core/group.h -misc_specialfile.o: ../core/functions.h ../core/lastcontainer.h -misc_specialfile.o: ../core/mounts.h ../core/mount.h ../core/loadavg.h +misc_specialfile.o: ../core/data.h ../core/dirs.h ../core/users.h +misc_specialfile.o: ../core/groups.h ../core/functions.h +misc_specialfile.o: ../core/lastcontainer.h ../core/mounts.h ../core/mount.h +misc_specialfile.o: ../core/loadavg.h mkdir.o: content.h ../core/item.h ../templates/templates.h mkdir.o: ../templates/patterncacher.h ../templates/misc.h mkdir.o: ../templates/localefilter.h ../core/locale.h mkdir.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h mkdir.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -mkdir.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -mkdir.o: ../core/session.h ../core/item.h ../core/error.h ../core/log.h -mkdir.o: ../core/user.h ../core/rebus.h ../core/function.h ../core/thread.h -mkdir.o: ../core/compress.h ../core/acceptencodingparser.h -mkdir.o: ../core/acceptbaseparser.h ../core/htmlfilter.h -mkdir.o: ../core/postmultiparser.h ../core/ticket.h ../core/error.h -mkdir.o: ../core/db.h ../core/group.h ../core/dircontainer.h -mkdir.o: ../core/ugcontainer.h ../core/data.h ../core/dirs.h ../core/users.h -mkdir.o: ../core/groups.h ../core/functions.h ../core/lastcontainer.h -mkdir.o: ../core/mounts.h ../core/mount.h ../core/loadavg.h ../core/notify.h +mkdir.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +mkdir.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +mkdir.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h +mkdir.o: ../core/request.h ../core/requesttypes.h ../core/session.h +mkdir.o: ../core/rebus.h ../core/function.h ../core/compress.h +mkdir.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h +mkdir.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/error.h +mkdir.o: ../core/data.h ../core/dirs.h ../core/users.h ../core/groups.h +mkdir.o: ../core/functions.h ../core/lastcontainer.h ../core/mounts.h +mkdir.o: ../core/mount.h ../core/loadavg.h ../core/notify.h mkdir.o: ../templatesnotify/templatesnotify.h ../core/mount.h mkdir.o: ../templates/misc.h +mv.o: content.h ../core/item.h ../templates/templates.h +mv.o: ../templates/patterncacher.h ../templates/misc.h +mv.o: ../templates/localefilter.h ../core/locale.h ../confparser/confparser.h +mv.o: ../templates/ckeditorgetparser.h ../core/httpsimpleparser.h +mv.o: ../core/log.h ../core/thread.h ../core/ticket.h ../core/db.h +mv.o: ../core/item.h ../core/user.h ../core/group.h ../core/thread.h +mv.o: ../core/error.h ../core/log.h ../core/dircontainer.h +mv.o: ../core/ugcontainer.h ../core/ticket.h ../core/request.h +mv.o: ../core/requesttypes.h ../core/session.h ../core/rebus.h +mv.o: ../core/function.h ../core/compress.h ../core/acceptencodingparser.h +mv.o: ../core/acceptbaseparser.h ../core/htmlfilter.h +mv.o: ../core/postmultiparser.h ../core/data.h ../core/dirs.h ../core/users.h +mv.o: ../core/groups.h ../core/functions.h ../core/lastcontainer.h +mv.o: ../core/mounts.h ../core/mount.h ../core/loadavg.h node.o: content.h ../core/item.h ../templates/templates.h node.o: ../templates/patterncacher.h ../templates/misc.h node.o: ../templates/localefilter.h ../core/locale.h node.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h node.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -node.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -node.o: ../core/session.h ../core/item.h ../core/error.h ../core/log.h -node.o: ../core/user.h ../core/rebus.h ../core/function.h ../core/thread.h -node.o: ../core/compress.h ../core/acceptencodingparser.h -node.o: ../core/acceptbaseparser.h ../core/htmlfilter.h -node.o: ../core/postmultiparser.h ../core/ticket.h +node.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +node.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +node.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h +node.o: ../core/request.h ../core/requesttypes.h ../core/session.h +node.o: ../core/rebus.h ../core/function.h ../core/compress.h +node.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h +node.o: ../core/htmlfilter.h ../core/postmultiparser.h priv.o: content.h ../core/item.h ../templates/templates.h priv.o: ../templates/patterncacher.h ../templates/misc.h priv.o: ../templates/localefilter.h ../core/locale.h priv.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h priv.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -priv.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -priv.o: ../core/session.h ../core/item.h ../core/error.h ../core/log.h -priv.o: ../core/user.h ../core/rebus.h ../core/function.h ../core/thread.h -priv.o: ../core/compress.h ../core/acceptencodingparser.h -priv.o: ../core/acceptbaseparser.h ../core/htmlfilter.h -priv.o: ../core/postmultiparser.h ../core/ticket.h ../core/error.h -priv.o: ../core/db.h ../core/group.h ../core/dircontainer.h -priv.o: ../core/ugcontainer.h ../core/data.h ../core/dirs.h ../core/users.h -priv.o: ../core/groups.h ../core/functions.h ../core/lastcontainer.h -priv.o: ../core/mounts.h ../core/mount.h ../core/loadavg.h +priv.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +priv.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +priv.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h +priv.o: ../core/request.h ../core/requesttypes.h ../core/session.h +priv.o: ../core/rebus.h ../core/function.h ../core/compress.h +priv.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h +priv.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/error.h +priv.o: ../core/data.h ../core/dirs.h ../core/users.h ../core/groups.h +priv.o: ../core/functions.h ../core/lastcontainer.h ../core/mounts.h +priv.o: ../core/mount.h ../core/loadavg.h reload.o: content.h ../core/item.h ../templates/templates.h reload.o: ../templates/patterncacher.h ../templates/misc.h reload.o: ../templates/localefilter.h ../core/locale.h reload.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h reload.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -reload.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -reload.o: ../core/session.h ../core/item.h ../core/error.h ../core/log.h -reload.o: ../core/user.h ../core/rebus.h ../core/function.h ../core/thread.h -reload.o: ../core/compress.h ../core/acceptencodingparser.h -reload.o: ../core/acceptbaseparser.h ../core/htmlfilter.h -reload.o: ../core/postmultiparser.h ../core/ticket.h ../core/error.h +reload.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +reload.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +reload.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h +reload.o: ../core/request.h ../core/requesttypes.h ../core/session.h +reload.o: ../core/rebus.h ../core/function.h ../core/compress.h +reload.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h +reload.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/error.h reload.o: ../core/notify.h ../templatesnotify/templatesnotify.h reload.o: ../core/mount.h ../templates/misc.h rm.o: content.h ../core/item.h ../templates/templates.h rm.o: ../templates/patterncacher.h ../templates/misc.h rm.o: ../templates/localefilter.h ../core/locale.h ../confparser/confparser.h rm.o: ../templates/ckeditorgetparser.h ../core/httpsimpleparser.h -rm.o: ../core/log.h ../core/thread.h ../core/ticket.h ../core/request.h -rm.o: ../core/requesttypes.h ../core/session.h ../core/item.h ../core/error.h -rm.o: ../core/log.h ../core/user.h ../core/rebus.h ../core/function.h -rm.o: ../core/thread.h ../core/compress.h ../core/acceptencodingparser.h +rm.o: ../core/log.h ../core/thread.h ../core/ticket.h ../core/db.h +rm.o: ../core/item.h ../core/user.h ../core/group.h ../core/thread.h +rm.o: ../core/error.h ../core/log.h ../core/dircontainer.h +rm.o: ../core/ugcontainer.h ../core/ticket.h ../core/request.h +rm.o: ../core/requesttypes.h ../core/session.h ../core/rebus.h +rm.o: ../core/function.h ../core/compress.h ../core/acceptencodingparser.h rm.o: ../core/acceptbaseparser.h ../core/htmlfilter.h -rm.o: ../core/postmultiparser.h ../core/ticket.h ../core/error.h ../core/db.h -rm.o: ../core/group.h ../core/dircontainer.h ../core/ugcontainer.h -rm.o: ../core/data.h ../core/dirs.h ../core/users.h ../core/groups.h -rm.o: ../core/functions.h ../core/lastcontainer.h ../core/mounts.h -rm.o: ../core/mount.h ../core/loadavg.h +rm.o: ../core/postmultiparser.h ../core/error.h ../core/data.h ../core/dirs.h +rm.o: ../core/users.h ../core/groups.h ../core/functions.h +rm.o: ../core/lastcontainer.h ../core/mounts.h ../core/mount.h +rm.o: ../core/loadavg.h run.o: content.h ../core/item.h ../templates/templates.h run.o: ../templates/patterncacher.h ../templates/misc.h run.o: ../templates/localefilter.h ../core/locale.h run.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h run.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -run.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -run.o: ../core/session.h ../core/item.h ../core/error.h ../core/log.h -run.o: ../core/user.h ../core/rebus.h ../core/function.h ../core/thread.h -run.o: ../core/compress.h ../core/acceptencodingparser.h -run.o: ../core/acceptbaseparser.h ../core/htmlfilter.h -run.o: ../core/postmultiparser.h ../core/ticket.h ../core/error.h +run.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +run.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +run.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h +run.o: ../core/request.h ../core/requesttypes.h ../core/session.h +run.o: ../core/rebus.h ../core/function.h ../core/compress.h +run.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h +run.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/error.h thread.o: content.h ../core/item.h ../templates/templates.h thread.o: ../templates/patterncacher.h ../templates/misc.h thread.o: ../templates/localefilter.h ../core/locale.h thread.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h thread.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -thread.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -thread.o: ../core/session.h ../core/item.h ../core/error.h ../core/log.h -thread.o: ../core/user.h ../core/rebus.h ../core/function.h ../core/thread.h -thread.o: ../core/compress.h ../core/acceptencodingparser.h -thread.o: ../core/acceptbaseparser.h ../core/htmlfilter.h -thread.o: ../core/postmultiparser.h ../core/ticket.h ../core/db.h -thread.o: ../core/group.h ../core/dircontainer.h ../core/ugcontainer.h -thread.o: ../core/data.h ../core/dirs.h ../core/users.h ../core/groups.h -thread.o: ../core/functions.h ../core/lastcontainer.h ../core/mounts.h -thread.o: ../core/mount.h ../core/loadavg.h ../core/mount.h +thread.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +thread.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +thread.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h +thread.o: ../core/request.h ../core/requesttypes.h ../core/session.h +thread.o: ../core/rebus.h ../core/function.h ../core/compress.h +thread.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h +thread.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/data.h +thread.o: ../core/dirs.h ../core/users.h ../core/groups.h ../core/functions.h +thread.o: ../core/lastcontainer.h ../core/mounts.h ../core/mount.h +thread.o: ../core/loadavg.h ../core/mount.h ticket.o: content.h ../core/item.h ../templates/templates.h ticket.o: ../templates/patterncacher.h ../templates/misc.h ticket.o: ../templates/localefilter.h ../core/locale.h ticket.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h ticket.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -ticket.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -ticket.o: ../core/session.h ../core/item.h ../core/error.h ../core/log.h -ticket.o: ../core/user.h ../core/rebus.h ../core/function.h ../core/thread.h -ticket.o: ../core/compress.h ../core/acceptencodingparser.h -ticket.o: ../core/acceptbaseparser.h ../core/htmlfilter.h -ticket.o: ../core/postmultiparser.h ../core/ticket.h ../core/db.h -ticket.o: ../core/group.h ../core/dircontainer.h ../core/ugcontainer.h -ticket.o: ../core/data.h ../core/dirs.h ../core/users.h ../core/groups.h -ticket.o: ../core/functions.h ../core/lastcontainer.h ../core/mounts.h -ticket.o: ../core/mount.h ../core/loadavg.h ../core/mount.h +ticket.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +ticket.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +ticket.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h +ticket.o: ../core/request.h ../core/requesttypes.h ../core/session.h +ticket.o: ../core/rebus.h ../core/function.h ../core/compress.h +ticket.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h +ticket.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/data.h +ticket.o: ../core/dirs.h ../core/users.h ../core/groups.h ../core/functions.h +ticket.o: ../core/lastcontainer.h ../core/mounts.h ../core/mount.h +ticket.o: ../core/loadavg.h ../core/mount.h upload.o: content.h ../core/item.h ../templates/templates.h upload.o: ../templates/patterncacher.h ../templates/misc.h upload.o: ../templates/localefilter.h ../core/locale.h upload.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h upload.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -upload.o: ../core/ticket.h ../core/request.h ../core/requesttypes.h -upload.o: ../core/session.h ../core/item.h ../core/error.h ../core/log.h -upload.o: ../core/user.h ../core/rebus.h ../core/function.h ../core/thread.h -upload.o: ../core/compress.h ../core/acceptencodingparser.h -upload.o: ../core/acceptbaseparser.h ../core/htmlfilter.h -upload.o: ../core/postmultiparser.h ../core/ticket.h ../core/data.h -upload.o: ../core/dirs.h ../core/dircontainer.h ../core/users.h -upload.o: ../core/ugcontainer.h ../core/groups.h ../core/group.h -upload.o: ../core/functions.h ../core/lastcontainer.h ../core/mounts.h -upload.o: ../core/mount.h ../core/loadavg.h ../core/misc.h +upload.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +upload.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +upload.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h +upload.o: ../core/request.h ../core/requesttypes.h ../core/session.h +upload.o: ../core/rebus.h ../core/function.h ../core/compress.h +upload.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h +upload.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/data.h +upload.o: ../core/dirs.h ../core/users.h ../core/groups.h ../core/functions.h +upload.o: ../core/lastcontainer.h ../core/mounts.h ../core/mount.h +upload.o: ../core/loadavg.h ../core/misc.h who.o: content.h ../core/item.h ../templates/templates.h who.o: ../templates/patterncacher.h ../templates/misc.h who.o: ../templates/localefilter.h ../core/locale.h who.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h who.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -who.o: ../core/ticket.h +who.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +who.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +who.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h diff --git a/content/Makefile.o.dep b/content/Makefile.o.dep index 0c238b1..eff91b6 100755 --- a/content/Makefile.o.dep +++ b/content/Makefile.o.dep @@ -1 +1 @@ -o = adduser.o cat.o content.o createthread.o createticket.o default.o download.o editticket.o emacs.o last.o login.o logout.o ls.o misc_item.o misc_specialfile.o mkdir.o node.o priv.o reload.o rm.o run.o thread.o ticket.o upload.o who.o +o = adduser.o cat.o content.o createthread.o createticket.o default.o download.o editticket.o emacs.o last.o login.o logout.o ls.o misc_item.o misc_specialfile.o mkdir.o mv.o node.o priv.o reload.o rm.o run.o thread.o ticket.o upload.o who.o diff --git a/content/content.cpp b/content/content.cpp index eb8a5f3..4d85955 100755 --- a/content/content.cpp +++ b/content/content.cpp @@ -211,10 +211,10 @@ void Content::MakeStandardFunction() else if( request.pfunction->code == FUN_UPTIME ) { /* do nothing */ } -/* else + else if( request.pfunction->code == FUN_MV ) FunMv(); - else +/* else if( request.pfunction->code == FUN_UNAME ) FunUname(); */ @@ -309,6 +309,10 @@ void Content::MakePost() PostFunAddUser(); break; + case FUN_MV: + PostFunMv(); + break; + default: log << log1 << "Content: unknown post function" << logend; break; @@ -375,6 +379,9 @@ void Content::Make() if( request.session->spam_score > 0 ) log << log1 << "Content: spam score: " << request.session->spam_score << logend; + if( request.IsParam("noredirect") ) + request.redirect_to.clear(); + if( !request.redirect_to.empty() ) return; @@ -397,7 +404,7 @@ void Content::Make() // !! mozna zrobic jakas obsluge kiedy nie mozemy sie redirectnac, np gdy wystapil blad // !! moze zwracac jakas wartosc? -void Content::RedirectTo(const Item & item) +void Content::RedirectTo(const Item & item, const char * postfix) { std::string path; @@ -418,11 +425,14 @@ std::string path; request.redirect_to += path; request.redirect_to += item.url; } + + if( postfix ) + request.redirect_to += postfix; } -void Content::RedirectTo(long item_id) +void Content::RedirectTo(long item_id, const char * postfix) { std::string path; Item * pdir; @@ -455,6 +465,9 @@ Item * pdir; log << log1 << "Content: Can't redirect: no such item: id: " << item_id << logend; } } + + if( postfix ) + request.redirect_to += postfix; } diff --git a/content/content.h b/content/content.h index 1d79929..407b553 100755 --- a/content/content.h +++ b/content/content.h @@ -18,6 +18,7 @@ #include "../templates/templates.h" #include "../core/thread.h" #include "../core/ticket.h" +#include "../core/db.h" @@ -39,6 +40,34 @@ class Content void PostFunAddUser(); void FunAddUser(); + + /* + mv + */ + bool MoveIsTheSameFile(const Item & item); + void MoveAuth(Item & item); + void MoveFile(Item & item, bool redirect = true); + void MoveDir(Item & item, bool redirect = true); + void MoveAuthPrepareQuery(); + void MoveAuthContentOfDir(const Item & item); + bool MoveParseDir(long & dir_id, std::string & dir, std::string & file); + bool MoveCheckAccessFromToDir(); + bool MoveCheckAccessFrom(); + bool MoveCheckAccessTo(long dir_id); + bool MoveCheckMountPoints(long dir_id); + void MoveContentOfDir(); + void PostFunMv(); + void FunMv(); + std::string mv_dir; + std::string mv_file; + std::string mv_new_path; + long mv_dir_id; + std::vector mv_auth; + Db::ItemQuery mv_auth_iq; + + + + void SetDefaultFunctionForFile(); void SetDefaultFunctionForDir(); void SetDefaultFunction(); @@ -143,13 +172,13 @@ class Content void PostFunCreateThreadLogAndRedirect(); void PostFunCreateThread(); - bool UploadCreatePath(std::string & path); + bool UploadCreatePath(); void UploadSaveFile(const std::string & tmp_filename, const std::string & destination); void UploadMulti(); void UploadSingle(); bool FunUploadCheckAbuse(); void PostFunUpload(); - std::string tmp_path; + bool FunCreateTicketCheckAccess(); void FunCreateTicket(); @@ -177,8 +206,8 @@ class Content void ReadTicketExpected(Ticket & ticket); void ReadTicketProgress(Ticket & ticket); - void RedirectTo(const Item & item); - void RedirectTo(long item_id); + void RedirectTo(const Item & item, const char * postfix = 0); + void RedirectTo(long item_id, const char * postfix = 0); void RedirectToLastDir(); void CheckGetPostTimes(time_t difference = 10); diff --git a/content/download.cpp b/content/download.cpp index cd17b47..d7f7317 100755 --- a/content/download.cpp +++ b/content/download.cpp @@ -20,7 +20,7 @@ void Content::FunDownload() // !! moze wywalic to no_item i wszedzie w takich miejscach dac poprostu permission_denied? if( !request.is_item ) { - log << log1 << "Content: pv function requires an item" << logend; + log << log1 << "Content: download function requires an item" << logend; request.status = WINIX_ERR_NO_ITEM; return; } @@ -28,19 +28,14 @@ void Content::FunDownload() if( !request.HasReadAccess(request.item) || request.item.auth == Item::auth_none || - data.auth_simplefs_dir.empty() ) + request.item.auth_path.empty() ) { request.status = WINIX_ERR_PERMISSION_DENIED; return; } request.send_as_attachment = request.IsParam("attachment"); - - if( !request.MakePath(request.x_sendfile) ) - { - request.status = WINIX_ERR_PERMISSION_DENIED; - return; - } + request.x_sendfile = request.item.auth_path; } diff --git a/content/mv.cpp b/content/mv.cpp new file mode 100755 index 0000000..3edddfc --- /dev/null +++ b/content/mv.cpp @@ -0,0 +1,361 @@ +/* + * This file is a part of Winix + * and is not publicly distributed + * + * Copyright (c) 2008-2010, Tomasz Sowa + * All rights reserved. + * + */ + +#include +#include "content.h" +#include "../core/request.h" +#include "../core/data.h" + + + +bool Content::MoveCheckAccessFromToDir() +{ +Item * last; +Item * last_but_one = 0; + + last = request.dir_table[request.dir_table.size()-1]; + + if( request.dir_table.size() >= 2 ) + last_but_one = request.dir_table[request.dir_table.size()-2]; + + if( request.method != Request::post ) + { + // used in GET (HEAD in the future?) + + if( !request.HasWriteAccess(*last) && + (!last_but_one || !request.HasWriteAccess(*last_but_one)) ) + return false; + } + else + { + // used in POST when the moving is performed + + if( request.IsPostVar("onlycontent") ) + return request.HasWriteAccess(*last); + else + if( last_but_one ) + return request.HasWriteAccess(*last_but_one); + else + return false; // you cannot move the root directory + } + +return true; +} + + +bool Content::MoveCheckAccessFrom() +{ + if( request.is_item ) + { + // moving a file + + if( !request.HasWriteAccess(*request.dir_table.back()) ) + { + request.status = WINIX_ERR_PERMISSION_DENIED; + return false; + } + } + else + { + if( !MoveCheckAccessFromToDir() ) + { + request.status = WINIX_ERR_PERMISSION_DENIED; + return false; + } + } + +return true; +} + + +bool Content::MoveCheckAccessTo(long dir_id) +{ + Item * pdir = data.dirs.GetDir(dir_id); + + if( !pdir ) + { + request.status = WINIX_ERR_INCORRECT_DIR; + return false; + } + + if( !request.HasReadExecAccessToPath(dir_id) || !request.HasWriteAccess(*pdir) ) + { + request.status = WINIX_ERR_PERMISSION_DENIED; + return false; + } + +return true; +} + + + +bool Content::MoveCheckMountPoints(long dir_id) +{ + /* + Mount * new_mount = data.mounts.CalcMount(dir_id); + + if( !new_mount ) + { + if( data.mounts.pmount->type != Mount::cms ) + { + request.status = WINIX_DIFFERENT_MOUNT_POINTS; + return false; + } + + return true; + } + + if( new_mount->type != data.mounts.pmount->type ) + { + request.status = WINIX_DIFFERENT_MOUNT_POINTS; + return false; + } + */ + +return true; +} + + + +bool Content::MoveParseDir(long & dir_id, std::string & dir, std::string & file) +{ + std::string * move_to = request.PostVar("moveto"); + + if( !move_to ) + { + request.status = WINIX_ERR_PERMISSION_DENIED; + return false; + } + + int res = data.dirs.AnalyzePath(*move_to, dir_id, dir, file); + + if( res == 1 ) + request.status = WINIX_ERR_NO_ROOT_DIR; + else + if( res != 0 ) + request.status = WINIX_ERR_INCORRECT_DIR; + +return res == 0; +} + + + +void Content::MoveAuth(Item & item) +{ + if( !request.MakePath(item, mv_new_path, true) ) + { + request.status = WINIX_ERR_PERMISSION_DENIED; + return; + } + + if( rename(item.auth_path.c_str(), mv_new_path.c_str()) == 0 ) + { + log << log1 << "Content: moved static file from: " << item.auth_path << ", to: " << mv_new_path << logend; + item.auth_path = mv_new_path; + request.status = db.EditAuthById(item, item.id); + } + else + { + int err = errno; + + log << log1 << "Content: can't move a file from: " << item.auth_path << ", to: " << mv_new_path << ", "; + log.SystemErr(err); + log << logend; + + request.status = WINIX_ERR_PERMISSION_DENIED; + } +} + + + +bool Content::MoveIsTheSameFile(const Item & item) +{ + if( mv_file.empty() ) + { + if( item.parent_id == mv_dir_id ) + return true; // nothing to do + } + else + { + if( item.parent_id == mv_dir_id && item.url == mv_file ) + return true; // nothing to do + } + +return false; +} + + + +void Content::MoveFile(Item & item, bool redirect) +{ + if( MoveIsTheSameFile(item) ) + return; + + if( !mv_file.empty() ) + { + item.url = mv_file; + PrepareUrl(item); + } + + item.parent_id = mv_dir_id; + request.status = db.EditParentUrlById(item, item.id); + + if( request.status == WINIX_ERR_OK ) + { + log << log2 << "Content: the file was moved to: " << mv_dir << item.url << logend; + + if( item.auth != Item::auth_none ) + MoveAuth(item); + + if( redirect ) + RedirectTo(item); + } +} + + + +void Content::MoveContentOfDir() +{ +Db::ItemQuery iq; + + iq.sel_parent_id = true; + iq.sel_type = true; + iq.sel_url = true; + iq.sel_auth = true; + iq.WhereParentId(request.dir_table.back()->id); + + db.GetItems(request.item_table, iq); + + for(size_t i=0 ; isecond)); + + mv_auth_iq.WhereParentId(item.id); + + // don't use request.item here (is used in MoveContentOfDir()) + db.GetItems(mv_auth, mv_auth_iq); + + for(size_t i=0 ; isecond.filename.c_str(); - request.item.subject = file_name; - request.item.url = file_name; - request.item.auth = SelectFileType(file_name); + request.item.subject = file_name; + request.item.url = file_name; + request.item.auth = SelectFileType(file_name); PrepareUrl(request.item); PostFunEmacsAdd(); // always adding a new item - if( !UploadCreatePath(tmp_path) ) + if( !UploadCreatePath() ) return; if( request.status == WINIX_ERR_OK ) - UploadSaveFile(i->second.tmp_filename, tmp_path); + { + UploadSaveFile(i->second.tmp_filename, request.item.auth_path); + request.status = db.EditAuthById(request.item, request.item.id); + } } RedirectToLastDir(); @@ -149,23 +152,19 @@ void Content::UploadSingle() PostFunEmacsAdd(); // always adding a new item + // url can be changed by PostFunEmacsAdd() + if( !UploadCreatePath() ) + return; if( request.status == WINIX_ERR_OK ) { const std::string & tmp_filename = request.post_file_table.begin()->second.tmp_filename; - - if( !UploadCreatePath(tmp_path) ) - return; - - UploadSaveFile(tmp_filename, tmp_path); + UploadSaveFile(tmp_filename, request.item.auth_path); + request.status = db.EditAuthById(request.item, request.item.id); } - if( request.status == WINIX_ERR_OK ) - { - if( !request.IsParam("ckeditor_upload") ) - RedirectTo(request.item); - } + RedirectTo(request.item, "/cat"); } diff --git a/core/Makefile.dep b/core/Makefile.dep index 8dbf3ff..0bf5314 100755 --- a/core/Makefile.dep +++ b/core/Makefile.dep @@ -83,15 +83,15 @@ requestcontroller.o: ../templates/templates.h ../templates/patterncacher.h requestcontroller.o: misc.h item.h ../templates/ckeditorgetparser.h requestcontroller.o: ../core/httpsimpleparser.h ../core/log.h requestcontroller.o: ../core/locale.h ../confparser/confparser.h -requestcontroller.o: ../core/thread.h ../core/ticket.h sessionmanager.h -requestcontroller.o: sessioncontainer.h session.h error.h log.h user.h -requestcontroller.o: rebus.h functionparser.h requesttypes.h data.h dirs.h -requestcontroller.o: dircontainer.h users.h ugcontainer.h groups.h group.h +requestcontroller.o: ../core/thread.h ../core/ticket.h ../core/db.h user.h +requestcontroller.o: group.h thread.h error.h log.h dircontainer.h +requestcontroller.o: ugcontainer.h ticket.h sessionmanager.h +requestcontroller.o: sessioncontainer.h session.h rebus.h functionparser.h +requestcontroller.o: requesttypes.h data.h dirs.h users.h groups.h requestcontroller.o: functions.h function.h lastcontainer.h mounts.h mount.h -requestcontroller.o: loadavg.h request.h thread.h compress.h -requestcontroller.o: acceptencodingparser.h acceptbaseparser.h htmlfilter.h -requestcontroller.o: postmultiparser.h ticket.h postparser.h -requestcontroller.o: httpsimpleparser.h cookieparser.h notify.h +requestcontroller.o: loadavg.h request.h compress.h acceptencodingparser.h +requestcontroller.o: acceptbaseparser.h htmlfilter.h postmultiparser.h +requestcontroller.o: postparser.h httpsimpleparser.h cookieparser.h notify.h requestcontroller.o: ../templatesnotify/templatesnotify.h ../core/mount.h requestcontroller.o: ../templates/misc.h ../templates/localefilter.h session.o: session.h item.h error.h log.h user.h rebus.h diff --git a/core/db.cpp b/core/db.cpp index 4ee26b8..884c97d 100755 --- a/core/db.cpp +++ b/core/db.cpp @@ -301,7 +301,8 @@ return status; - +//!! wywalic z nazwy 'Subject' nic nie jest robione z tytulem +// ta metoda uzywana tez jest w EditParentUrlById() bool Db::AddItemCreateUrlSubject(Item & item) { bool is_that_url; @@ -455,7 +456,7 @@ Error Db::AddItemIntoItem(Item & item) AssertConnection(); std::ostringstream query; query << "insert into core.item (user_id, group_id, privileges, date_creation, date_modification, type, " - "parent_id, content_id, auth, default_item, subject, guest_name, url) values ("; + "parent_id, content_id, auth, auth_path, default_item, subject, guest_name, url) values ("; query << '\'' << item.user_id << "', "; query << '\'' << item.group_id << "', "; query << '\'' << item.privileges << "', "; @@ -464,7 +465,8 @@ Error Db::AddItemIntoItem(Item & item) query << '\'' << static_cast(item.type) << "', "; query << '\'' << item.parent_id << "', "; query << '\'' << item.content_id << "', "; - query << '\'' << static_cast(item.auth) << "', "; + query << '\'' << static_cast(item.auth) << "', "; + query << '\'' << Escape(item.auth_path) << "', "; query << '\'' << item.default_item << "', "; query << '\'' << Escape(item.subject) << "', "; query << '\'' << Escape(item.guest_name) << "', "; @@ -561,7 +563,7 @@ Error Db::EditItemInItem(Item & item, bool with_url) AssertConnection(); std::ostringstream query; query << "update core.item set (user_id, group_id, privileges, date_creation, date_modification, type, " - "default_item, parent_id, subject, guest_name, auth"; + "default_item, parent_id, subject, guest_name, auth, auth_path"; if( with_url ) query << ", url"; @@ -577,7 +579,8 @@ Error Db::EditItemInItem(Item & item, bool with_url) query << '\'' << item.parent_id << "', "; query << '\'' << Escape(item.subject) << "', "; query << '\'' << Escape(item.guest_name) << "', "; - query << '\'' << static_cast(item.auth) << "' "; + query << '\'' << static_cast(item.auth) << "', "; + query << '\'' << Escape(item.auth_path) << "' "; if( with_url ) { @@ -802,7 +805,7 @@ PGresult * Db::GetItemsQuery(const ItemQuery & iq) if( iq.sel_url ) query << " ,url"; if( iq.sel_type ) query << " ,type"; if( iq.sel_default_item ) query << " ,default_item"; - if( iq.sel_auth ) query << " ,auth"; + if( iq.sel_auth ) query << " ,auth, auth_path"; query << " from core.item"; @@ -818,7 +821,19 @@ PGresult * Db::GetItemsQuery(const ItemQuery & iq) if( iq.where_id ) { query << if_and << "id='" << iq.id << "'" ; if_and = add_and; } if( iq.where_parent_id ) { query << if_and << "parent_id='" << iq.parent_id << "'" ; if_and = add_and; } if( iq.where_type ) { query << if_and << "type='" << static_cast(iq.type) << "'" ; if_and = add_and; } - if( iq.where_auth ) { query << if_and << "auth='" << static_cast(iq.auth) << "'" ; if_and = add_and; } + + if( iq.where_auth ) + { + query << if_and << "auth"; + + if(iq.auth_equal ) + query << "="; + else + query << "!="; + + query << "'" << static_cast(iq.auth) << "'"; + if_and = add_and; + } } @@ -1138,6 +1153,71 @@ return result; +Error Db::EditParentUrlById(Item & item, long id) +{ + PGresult * r = 0; + Error result = WINIX_ERR_OK; + bool url_without_id = false; + + try + { + AssertConnection(); + std::ostringstream query; + query << "update core.item set (parent_id, url) = ("; + query << '\'' << item.parent_id << "', "; + + url_without_id = AddItemCreateUrlSubject(item); + + if( url_without_id ) + query << '\'' << Escape(item.url) << "'"; + else + query << '\'' << item.id << "'"; ; + + query << ") where id='" << id << "';"; + + r = AssertQuery(query.str()); + AssertResultStatus(r, PGRES_COMMAND_OK); + } + catch(const Error & e) + { + result = e; + } + + ClearResult(r); + +return result; +} + + +Error Db::EditAuthById(Item & item, long id) +{ + PGresult * r = 0; + Error result = WINIX_ERR_OK; + + try + { + AssertConnection(); + std::ostringstream query; + query << "update core.item set (auth, auth_path) = ("; + query << '\'' << static_cast(item.auth) << "', "; + query << '\'' << Escape(item.auth_path) << "') "; + query << " where id='" << id << "';"; + + r = AssertQuery(query.str()); + AssertResultStatus(r, PGRES_COMMAND_OK); + } + catch(const Error & e) + { + result = e; + } + + ClearResult(r); + +return result; +} + + + Error Db::DelDirById(long id) { Error result = WINIX_ERR_OK; diff --git a/core/db.h b/core/db.h index c8a03d1..c70b581 100755 --- a/core/db.h +++ b/core/db.h @@ -66,7 +66,7 @@ public: bool sel_url; // url bool sel_type; // type (dir, file, none) bool sel_default_item; // default_item - bool sel_auth; // auth + bool sel_auth; // auth, auth_path bool where_id; // bool where_parent_id; // @@ -77,6 +77,7 @@ public: long parent_id; // if where_parent_id is true Item::Type type; Item::Auth auth; + bool auth_equal; // if true means auth should be equal bool sort_asc; @@ -102,14 +103,17 @@ public: where_auth = where_; } - void WhereId(long id_) { where_id = true; id = id_; } - void WhereParentId(long parent_id_) { where_parent_id = true; parent_id = parent_id_; } - void WhereType(Item::Type type_) { where_type = true; type = type_; } - void WhereAuth(Item::Auth st) { where_auth = true; auth = st; } + void WhereId(long id_) { where_id = true; id = id_; } + void WhereParentId(long parent_id_) { where_parent_id = true; parent_id = parent_id_; } + void WhereType(Item::Type type_) { where_type = true; type = type_; } + void WhereAuth(Item::Auth st, + bool equal = true) { where_auth = true; auth = st; auth_equal = equal; } ItemQuery() { - sort_asc = true; + sort_asc = true; + auth_equal = true; + SetAll(true, false); id = -1; @@ -131,7 +135,8 @@ public: bool GetPriv(Item & item, long id); Error EditPrivById(Item & item, long id); - + Error EditParentUrlById(Item & item, long id); + Error EditAuthById(Item & item, long id); Error DelDirById(long id); bool DelItem(const Item & item); @@ -215,7 +220,7 @@ protected: struct ItemColumns { int id, user_id, group_id, privileges, date_creation, date_modification, url, type, parent_id, - content_id, default_item, subject, content, content_type, guest_name, auth; + content_id, default_item, subject, content, content_type, guest_name, auth, auth_path; void SetColumns(PGresult * r); void SetItem(PGresult * r, long row, Item & item); diff --git a/core/db_itemcolumns.cpp b/core/db_itemcolumns.cpp index 7809bb8..31f45ef 100755 --- a/core/db_itemcolumns.cpp +++ b/core/db_itemcolumns.cpp @@ -29,7 +29,8 @@ void Db::ItemColumns::SetColumns(PGresult * r) content = PQfnumber(r, "content"); content_type = PQfnumber(r, "content_type"); guest_name = PQfnumber(r, "guest_name"); - auth = PQfnumber(r, "auth"); + auth = PQfnumber(r, "auth"); + auth_path = PQfnumber(r, "auth_path"); } @@ -52,6 +53,7 @@ void Db::ItemColumns::SetItem(PGresult * r, long row, Item & item) if( content_type != -1 ) item.content_type = static_cast( atoi(Db::AssertValue(r, row, content_type)) ); if( guest_name != -1 ) item.guest_name = Db::AssertValue(r, row, guest_name); if( auth != -1 ) item.auth = static_cast( atoi(Db::AssertValue(r, row, auth)) ); + if( auth_path != -1 ) item.auth_path = Db::AssertValue(r, row, auth_path); } diff --git a/core/dircontainer.cpp b/core/dircontainer.cpp index 2d4642b..f6f3cc1 100755 --- a/core/dircontainer.cpp +++ b/core/dircontainer.cpp @@ -131,6 +131,45 @@ return last_iter; +bool DirContainer::ChangeParent(long dir_id, long new_parent_id) +{ + Iterator i = FindId(dir_id); + + if( i == table.end() ) + return false; + + if( i->parent_id == new_parent_id ) + return true; // nothing to do + + ParentIterator p = FindFirstParent(i->parent_id); + bool found = false; + + for( ; p != table_parent.end() ; p = NextParent(p) ) + { + if( p->second->id == dir_id ) + { + table_parent.erase(p); + log << log3 << "DirCont: removed parent index to dir: " << i->id << logend; + + i->parent_id = new_parent_id; + table_parent.insert( std::make_pair(new_parent_id, i) ); + log << log3 << "DirCont: added parent index to dir, id: " << i->id << ", parent_id: " << i->parent_id << logend; + + found = true; + + if( i->url == "etc" ) // !! in the future can be more special folders + FindSpecialFolders(); + + break; // that iterator (p) is only one + } + } + + if( !found ) + log << log1 << "DirCont: cannot find parent_id: " << i->parent_id << " in parent indexes" << logend; + +return found; +} + void DirContainer::Clear() diff --git a/core/dircontainer.h b/core/dircontainer.h index 54cb9f9..3f5a6f7 100755 --- a/core/dircontainer.h +++ b/core/dircontainer.h @@ -40,6 +40,7 @@ public: SizeType Size(); bool Empty(); Iterator PushBack(const Item & item); + bool ChangeParent(long dir_id, long new_parent_id); void Clear(); Iterator FindId(long id); diff --git a/core/dirs.cpp b/core/dirs.cpp index 49373a5..e4564f0 100755 --- a/core/dirs.cpp +++ b/core/dirs.cpp @@ -138,6 +138,7 @@ DirContainer::ParentIterator Dirs::ParentEnd() // dodatkowo moze metoda AppendPath dodajaca sciezke do biezacego stringa? // albo tutaj stringa nie czyscic? // O(m * log n) (m- how many parts are in 'id') +// path with a slash at the end bool Dirs::MakePath(long id, std::string & path) { DirContainer::Iterator i; @@ -148,7 +149,8 @@ DirContainer::Iterator i; { i = dir_table.FindId(id); - if( i == dir_table.End() ) + if( i == dir_table.End() || + i->parent_id == id ) // means a loop (something wrong in the db) return false; if( i->parent_id == -1 ) @@ -164,6 +166,34 @@ DirContainer::Iterator i; +bool Dirs::ChangeParent(long dir_id, long new_parent_id) +{ + return dir_table.ChangeParent(dir_id, new_parent_id); +} + + + +/* + checking whether dir_id has a parent parent_id (somewhere in the path) +*/ +bool Dirs::HasParent(long dir_id, long parent_id) +{ +DirContainer::Iterator i; + + while( true ) + { + i = dir_table.FindId(dir_id); + + if( i==dir_table.End() || i->parent_id==-1 ) + return false; + + if( i->parent_id == parent_id ) + return true; + + dir_id = i->parent_id; + } +} + @@ -249,6 +279,85 @@ Item * Dirs::AddDir(const Item & item) +size_t Dirs::AnalyzeDir(Item * pdir, const std::string & path, long & dir_id, std::string & dir) +{ + size_t i = 0; + size_t old_i; + + while( true ) + { + dir_id = pdir->id; + + // skipping slashes + for( ; iid); + + if( !pdir ) + return old_i; // analyze_temp is not a directory + + dir += analyze_temp; + dir += '/'; + } +} + + + +/* + the path should begin with a slash + + return values: + 0 - directory exists + dir_id - id of the directory + dir - the path to the directory (with a slash at the end) + file - if not empty means a file name (we don't check if the file really exists) + 1 - there is not a root dir + 2 - the path is empty + 3 - there is not such a directory +*/ +int Dirs::AnalyzePath(const std::string & path, long & dir_id, std::string & dir, std::string & file) +{ + Item * pdir = data.dirs.GetRootDir(); + dir = '/'; + file.clear(); + + if( !pdir ) + return 1; + + if( path.empty() ) + return 2; + + if( path[0] != '/' ) + return 3; + + size_t i = AnalyzeDir(pdir, path, dir_id, dir); + + if( i < path.size() ) + { + // checking if at least one slash has left + for(size_t a=i ; a < path.size() ; ++a) + if( path[a] == '/' ) + return 3; // there is not such a directory + + // the rest of the path is a file name + file = path.c_str() + i; + } + +return 0; +} + + + void Dirs::SplitPath(const std::string & path, std::string & dir, std::string & file) { diff --git a/core/dirs.h b/core/dirs.h index b24b98d..dd52e75 100755 --- a/core/dirs.h +++ b/core/dirs.h @@ -34,13 +34,17 @@ public: bool IsDir(long dir_id); bool GetDirChilds(long parent_id, std::vector & childs_table); bool MakePath(long dir_id, std::string & path); + bool ChangeParent(long dir_id, long new_parent_id); + bool HasParent(long dir_id, long parent_id); + int AnalyzePath(const std::string & path, long & dir_id, std::string & dir, std::string & file); static void SplitPath(const std::string & path, std::string & dir, std::string & file); DirContainer::ParentIterator FindFirstParent(long parent_id); DirContainer::ParentIterator NextParent(DirContainer::ParentIterator i); DirContainer::ParentIterator ParentEnd(); + // these methods return null if there is no such a dir Item * GetRootDir(); Item * GetEtcDir(); @@ -57,6 +61,9 @@ private: DirContainer dir_table; + size_t AnalyzeDir(Item * pdir, const std::string & path, long & dir_id, std::string & dir); + std::string analyze_temp; + bool ExtractName(const char * & s, std::string & name); diff --git a/core/error.h b/core/error.h index 5a35026..479938f 100755 --- a/core/error.h +++ b/core/error.h @@ -52,6 +52,7 @@ #define WINIX_ERR_PASSWORD_TOO_SHORT 26 #define WINIX_ERR_USER_EXISTS 27 #define WINIX_ERR_LOGIN_EMPTY 28 +#define WINIX_DIFFERENT_MOUNT_POINTS 29 diff --git a/core/function.h b/core/function.h index 0f0e101..533e67c 100755 --- a/core/function.h +++ b/core/function.h @@ -36,7 +36,7 @@ #define FUN_EDITTICKET 19 #define FUN_TICKET 20 #define FUN_UPTIME 21 -//#define FUN_MV 23 +#define FUN_MV 23 //#define FUN_UNAME 24 #define FUN_CHMOD 25 #define FUN_CHOWN 26 diff --git a/core/functions.cpp b/core/functions.cpp index 5dde96b..c706591 100755 --- a/core/functions.cpp +++ b/core/functions.cpp @@ -116,11 +116,11 @@ void Functions::ReadFunctions() f.item.url = "uptime"; table.insert( std::make_pair(f.item.url, f) ); - /* f.code = FUN_MV; f.item.url = "mv"; table.insert( std::make_pair(f.item.url, f) ); + /* f.code = FUN_UNAME; f.item.url = "uname"; table.insert( std::make_pair(f.item.url, f) ); diff --git a/core/item.h b/core/item.h index a22ccc1..212f6de 100755 --- a/core/item.h +++ b/core/item.h @@ -76,7 +76,7 @@ enum Auth Auth auth; - +std::string auth_path; // path to a file (if auth!=auth_none) // methods @@ -125,6 +125,7 @@ void Clear() content_id = -1; auth = auth_none; + auth_path.clear(); SetDateToNow(); } diff --git a/core/misc.cpp b/core/misc.cpp index 15df72a..eb00600 100755 --- a/core/misc.cpp +++ b/core/misc.cpp @@ -608,6 +608,54 @@ bool CreateDir(const std::string & dir, int priv) +// creating directories (can be more than one) +// 'dirs' can begin with a slash (will be skipped) +bool CreateDirs(const char * base_dir, const char * dirs, int priv) +{ +static std::string temp; +const char * p = dirs; + + temp = base_dir; // we start creating from 'base_dir' + + if( temp.empty() ) + return false; + + if( temp[temp.size()-1] != '/' ) + temp += '/'; + + while( true ) + { + // skipping slashes + for( ; *p=='/' ; ++p ); + + if( *p == 0 ) + break; + + // taking the name + for( ; *p && *p!='/' ; ++p ) + temp += *p; + + if( !CreateDir(temp.c_str(), priv) ) + return false; + + temp += '/'; + } + +return true; +} + + + +bool CreateDirs(const std::string & base_dir, const std::string & dirs, int priv) +{ + return CreateDirs(base_dir.c_str(), dirs.c_str(), priv); +} + + + + + + // if there is not an extension it returns a pointer to the last '\0' character const char * GetFileExt(const char * name) { @@ -642,7 +690,12 @@ Item::Auth SelectFileType(const char * file_name) // as an image we're using only those types which can be rendered // by a web browser if( EqualNoCase(ext, "jpg") || + EqualNoCase(ext, "jpeg") || + EqualNoCase(ext, "jpe") || + EqualNoCase(ext, "pic") || + EqualNoCase(ext, "tga") || EqualNoCase(ext, "gif") || + EqualNoCase(ext, "bmp") || EqualNoCase(ext, "png") ) return Item::auth_image; diff --git a/core/misc.h b/core/misc.h index 5eb562f..c029c55 100755 --- a/core/misc.h +++ b/core/misc.h @@ -66,6 +66,8 @@ bool IsFile(const char * file); bool IsFile(const std::string & file); bool CreateDir(const char * dir, int priv); bool CreateDir(const std::string & dir, int priv); +bool CreateDirs(const char * base_dir, const char * dirs, int priv); +bool CreateDirs(const std::string & base_dir, const std::string & dirs, int priv); const char * GetFileExt(const char * name); Item::Auth SelectFileType(const char * file_name); diff --git a/core/mounts.cpp b/core/mounts.cpp index 1f33dec..7b75ee2 100755 --- a/core/mounts.cpp +++ b/core/mounts.cpp @@ -125,3 +125,24 @@ std::vector::reverse_iterator i; log << log2 << "M: current mount point is: " << pmount->TypeToStr() << " (default)" << ", fs: " << pmount->FsToStr() << logend; } + + +// can return null pointer +// and we don't assume cms as a default mount point if nothing is found +Mount * Mounts::CalcMount(long dir_id) +{ + while( true ) + { + Item * pdir = data.dirs.GetDir(dir_id); + + if( !pdir ) + return 0; + + std::map::iterator m = mount_tab.find( pdir->id ); + + if( m != mount_tab.end() ) + return &(m->second); + + dir_id = pdir->parent_id; + } +} diff --git a/core/mounts.h b/core/mounts.h index ed2935a..ad7ad1d 100755 --- a/core/mounts.h +++ b/core/mounts.h @@ -27,7 +27,7 @@ public: Error ReadMounts(); void CalcCurMount(); - + Mount * CalcMount(long dir_id); // current mount point // will not be null after calling CalcCurMount() or ReadMounts([...]) diff --git a/core/request.cpp b/core/request.cpp index e31adf9..dee54d2 100755 --- a/core/request.cpp +++ b/core/request.cpp @@ -505,7 +505,6 @@ bool compressing = data.compression && role == responder && redirect_to.empty() !browser_msie && !browser_konqueror && accept_encoding_parser.AcceptDeflate() && source.size() >= 512; - if( status == WINIX_ERR_NO_ITEM || status == WINIX_ERR_NO_FUNCTION || status == WINIX_ERR_UNKNOWN_PARAM ) header = h_404; @@ -695,6 +694,28 @@ bool Request::HasReadExecAccessForRoot(const Item & item) } + +bool Request::HasReadExecAccessToPath(long dir_id) +{ + while( true ) + { + Item * pdir = data.dirs.GetDir(dir_id); + + if( !pdir ) + return false; + + if( !HasReadExecAccess(*pdir) ) + return false; + + dir_id = pdir->parent_id; + + if( dir_id == -1 ) + return true; + } +} + + + // returning true if we can create a thread in the current directory bool Request::CanCreateThread(bool check_root) { @@ -939,29 +960,21 @@ return false; -bool Request::MakePathSimpleFs(std::string & path, bool create_dir) +bool Request::MakePathSimpleFs(std::string & path, long dir_id, bool create_dir) { -size_t i; - - path = data.auth_simplefs_dir; - - if( path.empty() ) + if( data.auth_simplefs_dir.empty() ) { log << log1 << "Request: auth_simplefs_dir is not set in the config file" << logend; return false; } - // skipping the first - the first is root - for(i=1 ; iurl; + if( !data.dirs.MakePath(dir_id, path) ) + return false; - if( create_dir && !CreateDir(path, 0755) ) - return false; - } + if( create_dir && !CreateDirs(data.auth_simplefs_dir, path, 0755) ) + return false; - path += '/'; + path.insert(0, data.auth_simplefs_dir); return true; } @@ -990,10 +1003,10 @@ char * hash = buffer; // make sure that the length is even if( (strlen(hash) & 1) != 0 ) - hash = buffer + 1; // the first character was our zero + hash = buffer + 1; // the first character was zero // creating dirs without the last part - // the last part is a part of a file (not a directory) + // the last part is a part of a file for(size_t i=0 ; hash[i] != 0 ; i+=2) { path += hash[i]; @@ -1016,22 +1029,24 @@ return true; } -// making a complete path to a request.item static file -bool Request::MakePath(std::string & path, bool create_dir) +// making a complete path to a static file +bool Request::MakePath(const Item & item, std::string & path, bool create_dir) { bool res; - if( data.mounts.pmount->fs == Mount::hashfs ) + Mount * pmount = data.mounts.CalcMount(item.parent_id); + + if( !pmount || pmount->fs == Mount::simplefs ) { - res = MakePathHashFs(path, request.item.id, create_dir); + res = MakePathSimpleFs(path, item.parent_id, create_dir); } else { - res = MakePathSimpleFs(path, create_dir); + res = MakePathHashFs(path, item.id, create_dir); } if( res ) - path += request.item.url; + path += item.url; else path.clear(); @@ -1040,3 +1055,7 @@ return res; +bool Request::MakePath(Item & item, bool create_dir) +{ + return MakePath(item, item.auth_path, create_dir); +} diff --git a/core/request.h b/core/request.h index 15fff25..6cdb085 100755 --- a/core/request.h +++ b/core/request.h @@ -157,6 +157,7 @@ struct Request bool HasReadWriteAccess(const Item & item); bool HasReadExecAccess(const Item & item); bool HasReadExecAccessForRoot(const Item & item); + bool HasReadExecAccessToPath(long dir_id); bool CanCreateThread(bool check_root = false); bool CanCreateTicket(bool check_root = false); @@ -170,9 +171,10 @@ struct Request bool CanUseBBCode(long user_id); bool CanUseRaw(long user_id); - bool MakePathSimpleFs(std::string & path, bool create_dir = false); + bool MakePathSimpleFs(std::string & path, long dir_id, bool create_dir = false); bool MakePathHashFs(std::string & path, long id, bool create_dir = false); - bool MakePath(std::string & path, bool create_dir = false); + bool MakePath(const Item & item, std::string & path, bool create_dir = false); + bool MakePath(Item & item, bool create_dir = false); private: diff --git a/html/fun_ckeditor.html b/html/fun_ckeditor.html index d50cf24..00c2bdf 100755 --- a/html/fun_ckeditor.html +++ b/html/fun_ckeditor.html @@ -34,9 +34,9 @@ [is winix_function_param_is "full"] - + [else] - + [end] [if-no user_logged] diff --git a/html/fun_mv.html b/html/fun_mv.html index e69de29..e9a8b38 100755 --- a/html/fun_mv.html +++ b/html/fun_mv.html @@ -0,0 +1,26 @@ +

{mv_header}

+ +[include "error.html"] + +
+
+ {mv_form_legend} + +

+ [if-one item_is]{mv_page} "[item_url]":[else]{mv_dir} "[dir_without_slash]"[end] +

+ + {suggested_url}:
+ + + + [if-no item_is] + + [end] + + +
+
+ + + diff --git a/html/fun_upload.html b/html/fun_upload.html index fdec8aa..1d2defc 100755 --- a/html/fun_upload.html +++ b/html/fun_upload.html @@ -6,7 +6,7 @@ [include "error.html"] -
+
{upload_form_legend} diff --git a/locale/en b/locale/en index cf277a7..94f0236 100755 --- a/locale/en +++ b/locale/en @@ -48,6 +48,7 @@ nick = Nick change = Change edit = Edit add = Add +move = Move user = User group = Group permissions = Permissions @@ -187,6 +188,13 @@ adduser_submit = Add user register_user_submit = Register +mv_header = Move +mv_form_legend = Move form +mv_page = Move page +mv_dir = Move directory +mv_only_content = Move only content of the directory + + # notifications notify_new = News notify_change = Changes @@ -205,11 +213,12 @@ notify_msg9 = We invite you to read.\nHave a good day. Bye. notify_footer = \n\n-- \nhttp://www.ttmath.org\nThis message has been sent automatically - do not answer please.\nIf you do not want to receive such messages you can switch them off\nin your user control panel. # errors -winix_err_default = An error occured, error code: 1 +winix_err_default = An error occured, error code: # those errors are taken automatically by [winix_err_msg_from_locales] +winix_err_3 = Incorrect directory. winix_err_18 = You are suspected to be a spammer,
you cannot send anything without logging first. winix_err_19 = Solve the rebus please! @@ -217,6 +226,7 @@ winix_err_25 = Passwords are different! winix_err_26 = A password should consist of at least five characters. winix_err_27 = We are sorry, but that user is already registered, check other login! winix_err_28 = Provide a login please. +winix_err_29 = The mount points are different. diff --git a/locale/pl b/locale/pl index 2122eaa..5bebb06 100755 --- a/locale/pl +++ b/locale/pl @@ -47,6 +47,7 @@ nick = Nick change = Zmień edit = Edytuj add = Dodaj +move = Przenieś user = Użytkownik group = Grupa permissions = Uprawnienia @@ -188,6 +189,13 @@ register_user_submit = Rejestruj +mv_header = Przenieś +mv_form_legend = Formularz zmiany +mv_page = Przenieś stronę +mv_dir = Przenieś katalog +mv_only_content = Przenieś tylko zawartość katalogu + + # notifications notify_new = Coś nowego notify_change = Zmiany @@ -210,6 +218,7 @@ notify_footer = \n\n-- \nhttp://www.slimaczek.pl\nTa wiadomo winix_err_default = Wystąpiły problemy z tą operacją, kod błędu: # those errors are taken automatically by [winix_err_msg_from_locales] +winix_err_3 = Nieprawidłowy katalog. winix_err_18 = Jesteś podejrzany jako spamer,
nie możesz nic wysłać do czasu zalogowania się! winix_err_19 = Proszę rozwiązać rebus! @@ -217,5 +226,5 @@ winix_err_25 = Podane has winix_err_26 = Hasło powinno składać się z co najmniej pięciu znaków. winix_err_27 = Przykro nam, podany identyfikator użytkownika jest już zajęty, proszę podać inny login! winix_err_28 = Proszę podać login. - +winix_err_29 = Punkty montowania różnią się od siebie. diff --git a/main/Makefile.dep b/main/Makefile.dep index 22a42d2..ccb5508 100755 --- a/main/Makefile.dep +++ b/main/Makefile.dep @@ -5,18 +5,17 @@ main.o: ../templates/templates.h ../templates/patterncacher.h main.o: ../templates/misc.h ../templates/localefilter.h ../core/locale.h main.o: ../confparser/confparser.h ../templates/ckeditorgetparser.h main.o: ../core/httpsimpleparser.h ../core/log.h ../core/thread.h -main.o: ../core/ticket.h ../core/sessionmanager.h ../core/sessioncontainer.h -main.o: ../core/session.h ../core/item.h ../core/error.h ../core/log.h -main.o: ../core/user.h ../core/rebus.h ../core/functionparser.h -main.o: ../core/requesttypes.h ../core/data.h ../core/dirs.h -main.o: ../core/dircontainer.h ../core/users.h ../core/ugcontainer.h -main.o: ../core/groups.h ../core/group.h ../core/functions.h -main.o: ../core/function.h ../core/lastcontainer.h ../core/mounts.h -main.o: ../core/mount.h ../core/loadavg.h ../core/request.h ../core/thread.h +main.o: ../core/ticket.h ../core/db.h ../core/item.h ../core/user.h +main.o: ../core/group.h ../core/thread.h ../core/error.h ../core/log.h +main.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h +main.o: ../core/sessionmanager.h ../core/sessioncontainer.h ../core/session.h +main.o: ../core/rebus.h ../core/functionparser.h ../core/requesttypes.h +main.o: ../core/data.h ../core/dirs.h ../core/users.h ../core/groups.h +main.o: ../core/functions.h ../core/function.h ../core/lastcontainer.h +main.o: ../core/mounts.h ../core/mount.h ../core/loadavg.h ../core/request.h main.o: ../core/compress.h ../core/acceptencodingparser.h main.o: ../core/acceptbaseparser.h ../core/htmlfilter.h -main.o: ../core/postmultiparser.h ../core/ticket.h ../core/db.h -main.o: ../core/config.h ../core/notify.h +main.o: ../core/postmultiparser.h ../core/config.h ../core/notify.h main.o: ../templatesnotify/templatesnotify.h ../core/mount.h main.o: ../templates/misc.h ../core/plugin.h ../core/request.h ../core/data.h main.o: ../core/pluginmsg.h diff --git a/templates/Makefile.dep b/templates/Makefile.dep index 61955f6..9c12206 100755 --- a/templates/Makefile.dep +++ b/templates/Makefile.dep @@ -197,15 +197,15 @@ who.o: ../core/httpsimpleparser.h ../core/log.h ../core/sessioncontainer.h who.o: ../core/session.h ../core/item.h ../core/error.h ../core/log.h who.o: ../core/user.h ../core/rebus.h ../core/requestcontroller.h who.o: ../content/content.h ../templates/templates.h ../core/thread.h -who.o: ../core/ticket.h ../core/sessionmanager.h ../core/sessioncontainer.h +who.o: ../core/ticket.h ../core/db.h ../core/group.h ../core/thread.h +who.o: ../core/dircontainer.h ../core/ugcontainer.h ../core/ticket.h +who.o: ../core/sessionmanager.h ../core/sessioncontainer.h who.o: ../core/functionparser.h ../core/requesttypes.h ../core/data.h -who.o: ../core/dirs.h ../core/dircontainer.h ../core/users.h -who.o: ../core/ugcontainer.h ../core/groups.h ../core/group.h -who.o: ../core/functions.h ../core/function.h ../core/lastcontainer.h -who.o: ../core/mounts.h ../core/mount.h ../core/loadavg.h ../core/request.h -who.o: ../core/thread.h ../core/compress.h ../core/acceptencodingparser.h -who.o: ../core/acceptbaseparser.h ../core/htmlfilter.h -who.o: ../core/postmultiparser.h ../core/ticket.h ../core/misc.h +who.o: ../core/dirs.h ../core/users.h ../core/groups.h ../core/functions.h +who.o: ../core/function.h ../core/lastcontainer.h ../core/mounts.h +who.o: ../core/mount.h ../core/loadavg.h ../core/request.h ../core/compress.h +who.o: ../core/acceptencodingparser.h ../core/acceptbaseparser.h +who.o: ../core/htmlfilter.h ../core/postmultiparser.h ../core/misc.h winix.o: templates.h patterncacher.h ../core/item.h misc.h localefilter.h winix.o: ../core/locale.h ../confparser/confparser.h ckeditorgetparser.h winix.o: ../core/httpsimpleparser.h ../core/log.h ../core/data.h diff --git a/templates/templates.cpp b/templates/templates.cpp index eab7172..5952466 100755 --- a/templates/templates.cpp +++ b/templates/templates.cpp @@ -64,8 +64,8 @@ Ezc::Pattern * p = 0; {FUN_UPLOAD, pat_fun_upload}, {FUN_UPTIME, pat_fun_uptime}, {FUN_LOGIN, pat_fun_login}, -/* {FUN_MV, pat_fun_mv}, - {FUN_UNAME, pat_fun_uname},*/ + {FUN_MV, pat_fun_mv}, +/* {FUN_UNAME, pat_fun_uname},*/ {FUN_CKEDITOR, pat_fun_ckeditor}, {FUN_ADDUSER, pat_fun_adduser} }; @@ -514,8 +514,8 @@ using namespace TemplatesFunctions; ReadFile(pat_fun_createticket, "fun_createticket.html"); ReadFile(pat_fun_uptime, "fun_uptime.html"); ReadFile(pat_fun_login, "fun_login.html"); - /*ReadFile(pat_fun_mv, "fun_mv.html"); - ReadFile(pat_fun_uname, "fun_uname.html");*/ + ReadFile(pat_fun_mv, "fun_mv.html"); + /*ReadFile(pat_fun_uname, "fun_uname.html");*/ ReadFile(pat_fun_ckeditor, "fun_ckeditor.html"); ReadFile(pat_fun_adduser, "fun_adduser.html"); }