Yes this for sure works. CLIENT_CAPABILITIES is a bitmask consisting of
the capabilities of the mysql client. CLIENT_LOCAL_FILES is bit 8 of the
mask (128). This information is sent to the server, which is actually
who decides whether local file uploads happen.
server code in mysql_server 3.23.49: sql_parse.cc:
if (!(thd->client_capabilities & CLIENT_LOCAL_FILES) ||
! opt_local_infile)
{
send_error(&thd->net,ER_NOT_ALLOWED_COMMAND);
goto error;
...
In earlier versions of mysql server this code is not present, however,
the file will still not be uploaded because of the code in the
mysql_load() function in sql_load.cc (which is present in every version
I have):
if (read_file_from_client && (thd->client_capabilities &
CLIENT_LOCAL_FILES))
{
char tmp [FN_REFLEN+1],*end;
DBUG_PRINT("info",("reading local file"));
tmp[0] = (char) 251; /* NULL_LENGTH
*/
end=strnmov(tmp+1,ex->file_name,sizeof(tmp)-2);
(void) my_net_write(&thd->net,tmp,(uint) (end-tmp));
(void) net_flush(&thd->net);
file = -1;
}
I have tested this with great success.
Thanks
-Jason
On Thu, 2002-02-28 at 06:03, Zak Greant wrote:
> Hi Jason,
>
> Did this actually work? I wrote almost the same code on my own and
> tested it, only to find that nothing changed. I walked through the code,
> but did not spot a point where the CLIENT_LOCAL_FILES is actually used
> other than:
>
> % grep -rn CLIENT_LOCAL_FILES *
> ext/mysql/libmysql/libmysql.c:53:#define CLIENT_CAPABILITIES ...
> ext/mysql/libmysql/mysql_com.h:73:#define CLIENT_LOCAL_FILES 128 ...
>
> I have not yet looked further than this.
>
> Monty cooked up a patch just before he went on vacation, but the patch
> is for a *way* newer version of libmysql and is not even remotely
> compatible.
>
> We (errr.. the PHP we that is) may wish to consider updating the
> embedded libmysql.
>
> --zak
>
> On Wed, 2002-02-27 at 09:59, Jason Greene wrote:
> > This simple patch resolves this issue in a clean way, without
> > introducing complex sql pre-processing code that introduces mutex
> > problems.
> >
> > The only issue is that it requires a modification to libmysql.c, which
> > provided that everyone here agrees with this fix, then I will post it to
> > [EMAIL PROTECTED] to get there reaction.
> >
> > -Jason
> > ----
> >
>
> > Index: ext/mysql/config.m4
> > ===================================================================
> > RCS file: /repository/php4/ext/mysql/config.m4,v
> > retrieving revision 1.38
> > diff -u -r1.38 config.m4
> > --- ext/mysql/config.m4 30 Nov 2001 18:59:45 -0000 1.38
> > +++ ext/mysql/config.m4 27 Feb 2002 16:51:33 -0000
> > @@ -41,6 +41,9 @@
> >
> > if test "$PHP_MYSQL" != "no"; then
> > AC_DEFINE(HAVE_MYSQL, 1, [Whether you have MySQL])
> > + if test "$PHP_SAFE_MODE" = "yes"; then
> > + AC_DEFINE(DISALLOW_MYSQL_LOAD_LOCAL, 1, [Whether to disable load local])
> > + fi
> > PHP_EXTENSION(mysql,$ext_shared)
> > fi
> >
> > Index: ext/mysql/libmysql/libmysql.c
> > ===================================================================
> > RCS file: /repository/php4/ext/mysql/libmysql/libmysql.c,v
> > retrieving revision 1.9
> > diff -u -r1.9 libmysql.c
> > --- ext/mysql/libmysql/libmysql.c 6 Nov 2001 16:59:07 -0000 1.9
> > +++ ext/mysql/libmysql/libmysql.c 27 Feb 2002 16:51:33 -0000
> > @@ -50,7 +50,11 @@
> > uint mysql_port=0;
> > my_string mysql_unix_port=0;
> >
> > +#ifndef DISALLOW_MYSQL_LOAD_LOCAL
> > #define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG |
>CLIENT_LOCAL_FILES | CLIENT_TRANSACTIONS)
> > +#else
> > +#define CLIENT_CAPABILITIES (CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG |
>CLIENT_TRANSACTIONS)
> > +#endif
> >
> > #ifdef __WIN__
> > #define CONNECT_TIMEOUT 20
> >
> > ----
> >
>
> > --
> > PHP Development Mailing List <http://www.php.net/>
> > To unsubscribe, visit: http://www.php.net/unsub.php
> --
> __ ___ ___ ____ __
> / |/ /_ __/ __/ __ \/ / Zak Greant <[EMAIL PROTECTED]>
> / /|_/ / // /\ \/ /_/ / /__ MySQL AB, Advocate
> /_/ /_/\_, /___/\___\_\___/ Calgary, Canada
> <___/ www.mysql.com 403.244.7213
>
--
Jason T. Greene
Internet Software Engineer
<[EMAIL PROTECTED]>
<[EMAIL PROTECTED]>
<[EMAIL PROTECTED]>
Use PHP: http://www.php.net
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php