@@ -2031,19 +2031,38 @@
2031 2031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Open the repository to be served if it is known. If g.argv[arg] is
2032 2032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a directory full of repositories, then set g.zRepositoryName to
2033 2033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the name of that directory and the specific repository will be
2034 2034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** opened later by process_one_web_page() based on the content of
2035 2035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the PATH_INFO variable.
2036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
2037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the fCreate flag is set, then create the repository if it
2038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** does not already exist.
2036 2039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
2037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void find_server_repository(int arg){
2040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void find_server_repository(int arg, int fCreate){
2038 2041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc<=arg ){
2039 2042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_must_be_within_tree();
2040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( file_isdir(g.argv[arg])==1 ){
2041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- g.zRepositoryName = mprintf("%s", g.argv[arg]);
2042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- file_simplify_name(g.zRepositoryName, -1, 0);
2043 2043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
2044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_open_repository(g.argv[arg]);
2044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zRepo = g.argv[arg];
2045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isDir = file_isdir(zRepo);
2046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isDir==1 ){
2047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.zRepositoryName = mprintf("%s", zRepo);
2048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ file_simplify_name(g.zRepositoryName, -1, 0);
2049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
2050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isDir==0 && fCreate ){
2051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_create_repository(zRepo);
2052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_open_repository(zRepo);
2053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_begin_transaction();
2054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_initial_setup(0,"now","admin");
2055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_multi_exec("UPDATE user SET pw='admin' WHERE login='admin'");
2056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_end_transaction(0);
2057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cache_initialize();
2058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.zLogin = 0;
2059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ g.userUid = 0;
2060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
2061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db_open_repository(zRepo);
2062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
2045 2064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2046 2065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2047 2066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2048 2067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
2049 2068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** undocumented format:
@@ -2146,15 +2165,15 @@
2146 2165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.fullHttpReply = 1;
2147 2166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.argc>=5 ){
2148 2167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.httpIn = fossil_fopen(g.argv[2], "rb");
2149 2168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.httpOut = fossil_fopen(g.argv[3], "wb");
2150 2169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zIpAddr = g.argv[4];
2151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- find_server_repository(5);
2170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ find_server_repository(5, 0);
2152 2171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
2153 2172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.httpIn = stdin;
2154 2173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.httpOut = stdout;
2155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- find_server_repository(2);
2174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ find_server_repository(2, 0);
2156 2175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2157 2176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zIpAddr==0 ){
2158 2177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zIpAddr = cgi_ssh_remote_addr(0);
2159 2178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zIpAddr && zIpAddr[0] ){
2160 2179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.fSshClient |= CGI_SSH_CLIENT;
@@ -2197,11 +2216,11 @@
2197 2216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Th_InitTraceLog();
2198 2217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
login_set_capabilities("sx", 0);
2199 2218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.useLocalauth = 1;
2200 2219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.httpIn = stdin;
2201 2220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.httpOut = stdout;
2202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- find_server_repository(2);
2221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ find_server_repository(2, 0);
2203 2222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.cgiOutput = 1;
2204 2223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.fullHttpReply = 1;
2205 2224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zIpAddr = cgi_ssh_remote_addr(0);
2206 2225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zIpAddr && zIpAddr[0] ){
2207 2226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.fSshClient |= CGI_SSH_CLIENT;
@@ -2276,10 +2295,11 @@
2276 2295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** connection is from localhost. The "ui" command also enables --repolist
2277 2296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by default.
2278 2297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2279 2298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Options:
2280 2299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --baseurl URL Use URL as the base (useful for reverse proxies)
2300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** --create Create a new REPOSITORY if it does not already exist
2281 2301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --files GLOBLIST Comma-separated list of glob patterns for static files
2282 2302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --localauth enable automatic login for requests from localhost
2283 2303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --localhost listen on 127.0.0.1 only (always true for "ui")
2284 2304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --nojail Drop root privileges but do not enter the chroot jail
2285 2305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** --notfound URL Redirect
@@ -2305,10 +2325,11 @@
2305 2325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
2306 2326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int allowRepoList; /* List repositories on URL "/" */
2307 2327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zAltBase; /* Argument to the --baseurl option */
2308 2328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zFileGlob; /* Static content must match this */
2309 2329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zIpAddr = 0; /* Bind to this IP address */
2330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int fCreate = 0;
2310 2331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2311 2332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(_WIN32)
2312 2333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zStopperFile; /* Name of file used to terminate server */
2313 2334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zStopperFile = find_option("stopper", 0, 1);
2314 2335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -2329,10 +2350,11 @@
2329 2350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Th_InitTraceLog();
2330 2351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zPort = find_option("port", "P", 1);
2331 2352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zNotFound = find_option("notfound", 0, 1);
2332 2353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
allowRepoList = find_option("repolist",0,0)!=0;
2333 2354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zAltBase = find_option("baseurl", 0, 1);
2355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fCreate = find_option("create",0,0)!=0;
2334 2356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( find_option("scgi", 0, 0)!=0 ) flags |= HTTP_SERVER_SCGI;
2335 2357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zAltBase ){
2336 2358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set_base_url(zAltBase);
2337 2359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2338 2360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( find_option("localhost", 0, 0)!=0 ){
@@ -2347,11 +2369,11 @@
2347 2369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isUiCmd ){
2348 2370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= HTTP_SERVER_LOCALHOST|HTTP_SERVER_REPOLIST;
2349 2371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.useLocalauth = 1;
2350 2372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
allowRepoList = 1;
2351 2373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- find_server_repository(2);
2374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ find_server_repository(2, fCreate);
2353 2375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zPort ){
2354 2376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
2355 2377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=strlen(zPort)-1; i>=0 && zPort[i]!=':'; i--){}
2356 2378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i>0 ){
2357 2379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zIpAddr = mprintf("%.*s", i, zPort);
@@ -2387,12 +2409,10 @@
2387 2409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
2388 2410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zBrowserCmd = mprintf("%s http://localhost:%%d/ &", zBrowser);
2389 2411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2390 2412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.repositoryOpen ) flags |= HTTP_SERVER_HAD_REPOSITORY;
2391 2413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.localOpen ) flags |= HTTP_SERVER_HAD_CHECKOUT;
2392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
2393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db_setup_server_and_project_codes(1);
2394 2414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2395 2415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db_close(1);
2396 2416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( cgi_http_server(iPort, mxPort, zBrowserCmd, zIpAddr, flags) ){
2397 2417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fossil_fatal("unable to listen on TCP socket %d", iPort);
2398 2418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -2401,11 +2421,11 @@
2401 2421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.httpOut = stdout;
2402 2422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( g.fHttpTrace || g.fSqlTrace ){
2403 2423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fprintf(stderr, "====== SERVER pid %d =======\n", getpid());
2404 2424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2405 2425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.cgiOutput = 1;
2406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- find_server_repository(2);
2426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ find_server_repository(2, 0);
2407 2427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
g.zRepositoryName = enter_chroot_jail(g.zRepositoryName, noJail);
2408 2428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( flags & HTTP_SERVER_SCGI ){
2409 2429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cgi_handle_scgi_request();
2410 2430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
2411 2431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cgi_handle_http_request(0);
2412 2432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!