Fossil SCM

Experimental changes to add 'setenv' support to CGI script files.

mistachkin 2015-01-20 17:48 trunk
Commit fe77afb158436ec6c7514e0e3a1bd87188cd1ac1
2 files changed +19 +9
+19
--- src/file.c
+++ src/file.c
@@ -1262,10 +1262,29 @@
12621262
char *zValue = getenv(zName);
12631263
#endif
12641264
if( zValue ) zValue = fossil_filename_to_utf8(zValue);
12651265
return zValue;
12661266
}
1267
+
1268
+/*
1269
+** Sets the value of an environment variable as UTF8.
1270
+*/
1271
+int fossil_setenv(const char *zName, const char *zValue){
1272
+ int rc;
1273
+ char *zString = mprintf("%s=%s", zName, zValue);
1274
+#ifdef _WIN32
1275
+ wchar_t *uString = fossil_utf8_to_unicode(zString);
1276
+ rc = _wputenv(uString);
1277
+ fossil_unicode_free(uString);
1278
+ fossil_free(zString);
1279
+#else
1280
+ rc = putenv(zString);
1281
+ /* NOTE: Cannot free the string on POSIX. */
1282
+ /* fossil_free(zString); */
1283
+#endif
1284
+ return rc;
1285
+}
12671286
12681287
/*
12691288
** Like fopen() but always takes a UTF8 argument.
12701289
*/
12711290
FILE *fossil_fopen(const char *zName, const char *zMode){
12721291
--- src/file.c
+++ src/file.c
@@ -1262,10 +1262,29 @@
1262 char *zValue = getenv(zName);
1263 #endif
1264 if( zValue ) zValue = fossil_filename_to_utf8(zValue);
1265 return zValue;
1266 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1267
1268 /*
1269 ** Like fopen() but always takes a UTF8 argument.
1270 */
1271 FILE *fossil_fopen(const char *zName, const char *zMode){
1272
--- src/file.c
+++ src/file.c
@@ -1262,10 +1262,29 @@
1262 char *zValue = getenv(zName);
1263 #endif
1264 if( zValue ) zValue = fossil_filename_to_utf8(zValue);
1265 return zValue;
1266 }
1267
1268 /*
1269 ** Sets the value of an environment variable as UTF8.
1270 */
1271 int fossil_setenv(const char *zName, const char *zValue){
1272 int rc;
1273 char *zString = mprintf("%s=%s", zName, zValue);
1274 #ifdef _WIN32
1275 wchar_t *uString = fossil_utf8_to_unicode(zString);
1276 rc = _wputenv(uString);
1277 fossil_unicode_free(uString);
1278 fossil_free(zString);
1279 #else
1280 rc = putenv(zString);
1281 /* NOTE: Cannot free the string on POSIX. */
1282 /* fossil_free(zString); */
1283 #endif
1284 return rc;
1285 }
1286
1287 /*
1288 ** Like fopen() but always takes a UTF8 argument.
1289 */
1290 FILE *fossil_fopen(const char *zName, const char *zMode){
1291
+9
--- src/main.c
+++ src/main.c
@@ -1794,10 +1794,11 @@
17941794
blob_reset(&value);
17951795
continue;
17961796
}
17971797
if( blob_eq(&key, "errorlog:") && blob_token(&line, &value) ){
17981798
g.zErrlog = mprintf("%s", blob_str(&value));
1799
+ blob_reset(&value);
17991800
continue;
18001801
}
18011802
if( blob_eq(&key, "HOME:") && blob_token(&line, &value) ){
18021803
cgi_setenv("HOME", blob_str(&value));
18031804
blob_reset(&value);
@@ -1834,10 +1835,18 @@
18341835
blob_reset(&value2);
18351836
continue;
18361837
}
18371838
if( blob_eq(&key, "files:") && blob_token(&line, &value) ){
18381839
pFileGlob = glob_create(blob_str(&value));
1840
+ blob_reset(&value);
1841
+ continue;
1842
+ }
1843
+ if( blob_eq(&key, "setenv:") && blob_token(&line, &value)
1844
+ && blob_token(&line, &value2) ){
1845
+ fossil_setenv(blob_str(&value), blob_str(&value2));
1846
+ blob_reset(&value);
1847
+ blob_reset(&value2);
18391848
continue;
18401849
}
18411850
}
18421851
blob_reset(&config);
18431852
if( g.db==0 && g.zRepositoryName==0 && nRedirect==0 ){
18441853
--- src/main.c
+++ src/main.c
@@ -1794,10 +1794,11 @@
1794 blob_reset(&value);
1795 continue;
1796 }
1797 if( blob_eq(&key, "errorlog:") && blob_token(&line, &value) ){
1798 g.zErrlog = mprintf("%s", blob_str(&value));
 
1799 continue;
1800 }
1801 if( blob_eq(&key, "HOME:") && blob_token(&line, &value) ){
1802 cgi_setenv("HOME", blob_str(&value));
1803 blob_reset(&value);
@@ -1834,10 +1835,18 @@
1834 blob_reset(&value2);
1835 continue;
1836 }
1837 if( blob_eq(&key, "files:") && blob_token(&line, &value) ){
1838 pFileGlob = glob_create(blob_str(&value));
 
 
 
 
 
 
 
 
1839 continue;
1840 }
1841 }
1842 blob_reset(&config);
1843 if( g.db==0 && g.zRepositoryName==0 && nRedirect==0 ){
1844
--- src/main.c
+++ src/main.c
@@ -1794,10 +1794,11 @@
1794 blob_reset(&value);
1795 continue;
1796 }
1797 if( blob_eq(&key, "errorlog:") && blob_token(&line, &value) ){
1798 g.zErrlog = mprintf("%s", blob_str(&value));
1799 blob_reset(&value);
1800 continue;
1801 }
1802 if( blob_eq(&key, "HOME:") && blob_token(&line, &value) ){
1803 cgi_setenv("HOME", blob_str(&value));
1804 blob_reset(&value);
@@ -1834,10 +1835,18 @@
1835 blob_reset(&value2);
1836 continue;
1837 }
1838 if( blob_eq(&key, "files:") && blob_token(&line, &value) ){
1839 pFileGlob = glob_create(blob_str(&value));
1840 blob_reset(&value);
1841 continue;
1842 }
1843 if( blob_eq(&key, "setenv:") && blob_token(&line, &value)
1844 && blob_token(&line, &value2) ){
1845 fossil_setenv(blob_str(&value), blob_str(&value2));
1846 blob_reset(&value);
1847 blob_reset(&value2);
1848 continue;
1849 }
1850 }
1851 blob_reset(&config);
1852 if( g.db==0 && g.zRepositoryName==0 && nRedirect==0 ){
1853

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button