~ubuntu-branches/ubuntu/gutsy/slocate/gutsy

« back to all changes in this revision

Viewing changes to src/slocate.c

  • Committer: Bazaar Package Importer
  • Author(s): Kevin Lindsay
  • Date: 2006-01-06 09:36:28 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20060106093628-cq82c695r3st8xkv
Tags: 3.0.beta.r3-1
* The environment variable LOCATE_PATH was not being used properly. It will
  now be used the same as in v2.7. Closes: #345646
* slocate was returning non zero for -h, --help, -V and --version. It now
  returns zero.
* PRUNEFS was being ignored in /etc/updatedb.conf
* Added documentation describing how /etc/updatedb.conf is used and what
  is supported to the README and the slocate.1 and updatedb.1 man pages.
* README.debian was removed in 3.0.beta.r1-1 to close bug 272131, but it was
  accidently readded in 3.0.beta.r2-1. I now have a use for it, so it is now
  here to stay.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/*****************************************************************************
2
 
 * Secure Locate v3.0 beta r1                                                *
3
 
 * December 19, 2005                                                         *
 
2
 * Secure Locate v3.0                                                        *
4
3
 * Author: Kevin Lindsay                                                     *
5
4
 * Copyright (c) 2005, 2006 Kevin Lindsay                                    *
6
5
 *                                                                           *
339
338
        /* The new FTS() funtionality */
340
339
        while ((file = fts_read(dir))) {
341
340
                /* fts_read () from glibc fails with EOVERFLOW when fts_pathlen
342
 
                 * +   would overflow the u_short file->fts_pathlen. */
 
341
                 * would overflow the u_short file->fts_pathlen. */
343
342
                if (file->fts_info == FTS_DP || file->fts_info == FTS_NS)
344
343
                    continue;
345
344
                
464
463
 
465
464
        match_ret = match(g_data, full_path, search_str, globflag);
466
465
        if (match_ret == 1) {
467
 
                if (g_data->slevel == VERIFY_ACCESS && access(full_path, F_OK) != 0)
 
466
                if (g_data->slevel == VERIFY_ACCESS && !verify_access(full_path))
468
467
                    match_ret = 0;
469
468
        } else if (match_ret == -1) {
470
469
                goto EXIT;
483
482
int search_db(struct g_data_s *g_data, char *database, char *search_str)
484
483
{
485
484
        int fd = -1;
486
 
        char ch[0];
 
485
        char ch[1];
487
486
        int buf_len;
488
 
        char buffer[BLOCK_SIZE];
 
487
        signed char buffer[BLOCK_SIZE];
489
488
        int ret = 0;
490
489
        int code_num = 0;
491
490
        char *path_head = NULL;
569
568
                code_num = buffer[b];
570
569
                /* Escape char, read extra byte */
571
570
                if (code_num == SLOC_ESC) {
572
 
                        b += 1;                 
 
571
                        b += 1;
573
572
                        if (b == buf_len) {
574
573
                                //printf("I 1 - %d\n", BLOCK_SIZE);
575
574
                                //exit(0);
576
575
                                buf_len = read(fd, buffer, BLOCK_SIZE);
577
576
                                b = 0;                          
578
577
                        }
579
 
                        /* A DC_ESC character indicates that we must read in a two bytes
 
578
                        /* A DC_ESC character indicates that we must read in two bytes
580
579
                         * for our code_num due to a long path. */
581
580
                        code_num = buffer[b];
582
581
                        b += 1;                 
624
623
                                code_str[size-1] = 0;
625
624
                                STATE = DC_NONE;
626
625
                        }
627
 
                        
628
 
                        code_str = strncat(code_str, buffer+b_mark, b-b_mark);                  
 
626
 
 
627
                        /* recast, buffer doesn't need to be signed here. */
 
628
                        code_str = strncat(code_str, ((char *)buffer)+b_mark, b-b_mark);
629
629
                        /* If we ran into the end of the current buffer, set the state
630
630
                         * to DC_DATA_INTR and exit so we can read more data and
631
631
                         * return to this state */
726
726
 
727
727
        if (!(g_data = init_global_data(argv)))
728
728
            goto EXIT;  
 
729
 
729
730
        
730
731
        /* Parse command line arguments */
731
732
        if (!(cmd_data = parse_cmds(g_data, argc, argv)))
732
733
            goto EXIT;
733
734
 
734
 
        if (strcmp(g_data->progname, "updatedb") == 0 || cmd_data->updatedb) {
735
 
                cmd_data->updatedb = TRUE;
736
 
                parse_updatedb(g_data, cmd_data->updatedb_conf);
737
 
                /* Check to make sure default database directory exists */
738
 
                //check_dir(SLOCATEDB_DIR);
739
 
        }
 
735
        if (cmd_data->exit_but_nice) {
 
736
                ret = 0;
 
737
                goto EXIT;
 
738
        }       
 
739
 
740
740
#if 0
741
741
        printf("Q: %d\n", g_data->QUIET);
742
742
        printf("V: %d\n", g_data->VERBOSE);