Every dog has a blog!
[ start | index | login or register ]
start > 2006-11-14 > 1

Pure-FTPd and the Upload-Script Feature

Created by derjohn. Last edited by derjohn, 5 years and 122 days ago. Viewed 9,767 times. #3
[diff] [history] [edit] [rdf]
labels
attachments

Pure-FTPd and the Upload-Script Feature

Today I was busy figuring out, what Pure-FTPd's upload-script feature is and how it works. As I mainly run Debian machines, this little howto will deal with "The Debian Way", as I use Debian's initscripts to activate the feature. On other distros YMMV.

Motivation: The uploadscript feature triggers a script after every upload that is made and hands over the path to the uploaded file as argument 1 ("$1") to the script. You can use the script to do something the with file immediately after the upload: You dont have to wait for a cronjob or write a directory watcher daemon. For example you could convert an uploaded picture to a differnt size and format and put it to a image galery...

Here is a little step-by-step guide:

Step 1: Run Pure-FTPd in standalone mode (not inetd mode). Change the option "STANDALONE_OR_INETD" to "standalone" in /etc/default/pure-ftpd.

Step 2: Enable the option itself:

echo "yes" > /etc/pure-ftpd/conf/CallUploadScript

Step 3: Tell Pure-FTPd the user ID under which the script should be run. Pure doesn't like usernames, so you have to provide the numeric UID. In case of www-data it is UID 33.

# if set, pure-uploadscript will spawn $UPLOADSCRIPT running as the # given uid and gid UPLOADUID=33 UPLOADGID=33

Step 4: Tell pure-ftpd where the script is located: Change the option UPLOADSCRIPT in /etc/default/pure-ftpd.

# example: UPLOADSCRIPT=/usr/local/sbin/uploadhandler.pl UPLOADSCRIPT=/usr/local/sbin/uploadhandler.pl

Step 5: Start or Restart Pure-ftpd

# /etc/init.d/pure-ftpd restart Running: /usr/sbin/pure-ftpd -l pam -u 1000 -E -o -O clf:/var/log/pure-ftpd/transfer.log -B Restarting ftp upload handler: pure-uploadscript.

Step 6: Check if the daemon really run with the new options.

root 18623 0.0 0.0 12120 868 ? Ss 19:39 0:00 pure-ftpd (SERVER) www-data 18671 0.0 0.0 11912 672 ? Ss 19:40 0:00 /usr/sbin/pure-uploadscript -r /usr/local/sbin/uploadhandler.pl -B -u 33 -g 33

Step 7: Create a test script. E.g. this one will write the filename to a file called /tmp/pure-was-here<datestamp>.

#!/bin/sh echo "$1" > /tmp/pure-was-here$(date +%Y%m%d%H%M%S)

Step 8: Test the script, log in via ftp and upload a file:

ftp> put test.txt local: test.txt remote: test.txt 200 PORT command successful 150 Connecting to port 41252 226-File successfully transferred 226 0.000 seconds (measured here), 50.72 Kbytes per second 5 bytes sent in 0.00 secs (187.8 kB/s)

Then check if tmp/pure-was-here<datestamp> was written.

A side note: In case you want to trigger a PHP Script (many of my customers like PHP, I dunno why), you can set UPLOADSCRIPT=/usr/local/sbin/uploadhandler.php

That script can contain any php script. So if you dont know Perl or bash, an skeleton of an uploadsceript can look like that:

# cat /usr/local/sbin/uploadhandler.php #!/usr/bin/php5 <?php echo ("foo"); ?>

Dont forget to 'chmod +x /usr/local/sbin/uploadhandler.php'. Test the script by executing it on the shell:

# /usr/local/sbin/uploadhandler.php foo

(c) Andreas John. This blog entry is licensed under GPL V2.

Please login to blog.derjohn.de.

< May 2012 >
SunMonTueWedThuFriSat
12345
6789101112
13141516171819
20212223242526
2728293031


Logged in Users: (1)
… and 2 Guests.

Blogrolling:
>>Blog des Wahnsinns
>>Daniel Holbach's Blog
>>Matt Cutt's blog
>>Randgruppentourismus

XHTML 1.0 validated
CSS validated
RSS 2.0 validated
RSS Feed

Hinweise zur Formatierung
snipsnap-help.

Powered by
SnipSnap 1.0b1-snipit

Ads will be placed here!

dem john sein blog | Impressum: Andreas John, Frankfurter Str. 98a, 63067 Offenbach, E-Mail: himself@derjohn.de