Пример #1
0
    int
main(int argc, char** argv)
{
    romaji *object, *hira2kata, *han2zen, *zen2han;
    char *word = NULL;

    object = romaji_open();
    hira2kata = romaji_open();
    han2zen = romaji_open();
    zen2han = romaji_open();
    romaji_set_verbose(zen2han, 1);

    while (*++argv)
    {
	if (0)
	    ;
	else if (argv[1] && (!strcmp("--word", *argv) || !strcmp("-w", *argv)))
	    word = *++argv;
    }

    if (object && hira2kata && han2zen && zen2han)
    {
	int retval = 0;

	retval = romaji_load(object, DICT_ROMA2HIRA);
	printf("romaji_load(%s)=%d\n", DICT_ROMA2HIRA, retval);
	retval = romaji_load(hira2kata, DICT_HIRA2KATA);
	printf("romaji_load(%s)=%d\n", DICT_HIRA2KATA, retval);
	retval = romaji_load(han2zen, DICT_HAN2ZEN);
	printf("romaji_load(%s)=%d\n", DICT_HAN2ZEN, retval);
	retval = romaji_load(zen2han, DICT_ZEN2HAN);
	printf("romaji_load(%s)=%d\n", DICT_HAN2ZEN, retval);
	if (word)
	    query_one(object, hira2kata, han2zen, zen2han, word);
	else
	    query_loop(object, hira2kata, han2zen, zen2han);
    }

    if (han2zen)
	romaji_close(han2zen);
    if (hira2kata)
	romaji_close(hira2kata);
    if (object)
	romaji_close(object);

    return 0;
}
Пример #2
0
    void
query_loop(romaji* object, romaji* hira2kata, romaji* han2zen, romaji* zen2han)
{
    char buf[256], *ans;

    while (1)
    {
	printf("QUERY: ");
	if (!fgets(buf, sizeof(buf), stdin))
	{
	    printf("\n");
	    break;
	}
	/* 改行をNUL文字に置き換える */
	if ((ans = strchr(buf, '\n')) != NULL)
	    *ans = '\0';
	query_one(object, hira2kata, han2zen, zen2han, buf);
    }
}
Пример #3
0
/****************************************************************************
  main program
****************************************************************************/
int main(int argc, const char *argv[])
{
	int opt;
	unsigned int lookup_type = 0x0;
	fstring lookup;
	static bool find_master=False;
	static bool lookup_by_ip = False;
	poptContext pc = NULL;
	TALLOC_CTX *frame = talloc_stackframe();
	int rc = 0;

	struct poptOption long_options[] = {
		POPT_AUTOHELP
		{ "broadcast", 'B', POPT_ARG_STRING, NULL, 'B', "Specify address to use for broadcasts", "BROADCAST-ADDRESS" },
		{ "flags", 'f', POPT_ARG_NONE, NULL, 'f', "List the NMB flags returned" },
		{ "unicast", 'U', POPT_ARG_STRING, NULL, 'U', "Specify address to use for unicast" },
		{ "master-browser", 'M', POPT_ARG_NONE, NULL, 'M', "Search for a master browser" },
		{ "recursion", 'R', POPT_ARG_NONE, NULL, 'R', "Set recursion desired in package" },
		{ "status", 'S', POPT_ARG_NONE, NULL, 'S', "Lookup node status as well" },
		{ "translate", 'T', POPT_ARG_NONE, NULL, 'T', "Translate IP addresses into names" },
		{ "root-port", 'r', POPT_ARG_NONE, NULL, 'r', "Use root port 137 (Win95 only replies to this)" },
		{ "lookup-by-ip", 'A', POPT_ARG_NONE, NULL, 'A', "Do a node status on <name> as an IP Address" },
		POPT_COMMON_SAMBA
		POPT_COMMON_CONNECTION
		{ 0, 0, 0, 0 }
	};

	*lookup = 0;

	load_case_tables();

	setup_logging(argv[0], DEBUG_STDOUT);

	pc = poptGetContext("nmblookup", argc, argv,
			long_options, POPT_CONTEXT_KEEP_FIRST);

	poptSetOtherOptionHelp(pc, "<NODE> ...");

	while ((opt = poptGetNextOpt(pc)) != -1) {
		switch (opt) {
		case 'f':
			give_flags = true;
			break;
		case 'M':
			find_master = true;
			break;
		case 'R':
			recursion_desired = true;
			break;
		case 'S':
			find_status = true;
			break;
		case 'r':
			RootPort = true;
			break;
		case 'A':
			lookup_by_ip = true;
			break;
		case 'B':
			if (interpret_string_addr(&bcast_addr,
					poptGetOptArg(pc),
					NI_NUMERICHOST)) {
				got_bcast = True;
				use_bcast = True;
			}
			break;
		case 'U':
			if (interpret_string_addr(&bcast_addr,
					poptGetOptArg(pc),
					0)) {
				got_bcast = True;
				use_bcast = False;
			}
			break;
		case 'T':
			translate_addresses = !translate_addresses;
			break;
		}
	}

	poptGetArg(pc); /* Remove argv[0] */

	if(!poptPeekArg(pc)) {
		poptPrintUsage(pc, stderr, 0);
		rc = 1;
		goto out;
	}

	if (!lp_load_global(get_dyn_CONFIGFILE())) {
		fprintf(stderr, "Can't load %s - run testparm to debug it\n",
				get_dyn_CONFIGFILE());
	}

	load_interfaces();
	if (!open_sockets()) {
		rc = 1;
		goto out;
	}

	while(poptPeekArg(pc)) {
		char *p;
		struct in_addr ip;

		fstrcpy(lookup,poptGetArg(pc));

		if(lookup_by_ip) {
			struct sockaddr_storage ss;
			ip = interpret_addr2(lookup);
			in_addr_to_sockaddr_storage(&ss, ip);
			fstrcpy(lookup,"*");
			if (!do_node_status(lookup, lookup_type, &ss)) {
				rc = 1;
			}
			continue;
		}

		if (find_master) {
			if (*lookup == '-') {
				fstrcpy(lookup,"\01\02__MSBROWSE__\02");
				lookup_type = 1;
			} else {
				lookup_type = 0x1d;
			}
		}

		p = strchr_m(lookup,'#');
		if (p) {
			*p = '\0';
			sscanf(++p,"%x",&lookup_type);
		}

		if (!query_one(lookup, lookup_type)) {
			rc = 1;
			d_printf( "name_query failed to find name %s", lookup );
			if( 0 != lookup_type ) {
				d_printf( "#%02x", lookup_type );
			}
			d_printf( "\n" );
		}
	}

out:
	poptFreeContext(pc);
	TALLOC_FREE(frame);
	return rc;
}
Пример #4
0
void test_query_directory( void )
{
	WCHAR dirname[] = L"\\??\\c:\\filetest";
	WCHAR filename[] = L"\\??\\c:\\filetest\\edb.chk";
	WCHAR edb[] = L"edb<\"*";
	UNICODE_STRING path, mask, empty;
	OBJECT_ATTRIBUTES oa;
	HANDLE dir, file;
	IO_STATUS_BLOCK iosb;
	BYTE buffer[0x100];
	NTSTATUS r;

	iosb.Status = ~0;
	iosb.Information = ~0;

	empty.Buffer = 0;
	empty.Length = 0;
	empty.MaximumLength = 0;

	init_us(&mask, edb);

	oa.Length = sizeof oa;
	oa.RootDirectory = 0;
	oa.ObjectName = &path;
	oa.Attributes = OBJ_CASE_INSENSITIVE;
	oa.SecurityDescriptor = 0;
	oa.SecurityQualityOfService = 0;

	init_us(&path, filename);
	r = NtDeleteFile( &oa );

	// delete the file to ensure preconditions
	init_us(&path, dirname);
	r = NtDeleteFile( &oa );

	// create a test directory
	r = NtCreateFile( &dir, GENERIC_READ | GENERIC_WRITE | FILE_LIST_DIRECTORY, &oa, &iosb,
			0, FILE_ATTRIBUTE_DIRECTORY, FILE_SHARE_READ, FILE_CREATE, FILE_DIRECTORY_FILE, 0, 0 );
	ok( r == STATUS_SUCCESS, "failed to create dir %08lx\n", r);
	ok( iosb.Status == STATUS_SUCCESS, "status wrong %08lx\n", iosb.Status);
	ok( iosb.Information == FILE_CREATED, "information wrong %08lx\n", iosb.Information);

	// add a file to the directory
	init_us(&path, filename);

	r = NtCreateFile( &file, GENERIC_READ | GENERIC_WRITE, &oa, &iosb,
			0, FILE_ATTRIBUTE_DIRECTORY, FILE_SHARE_READ, FILE_CREATE, 0, 0, 0 );
	ok( r == STATUS_SUCCESS, "failed to create file %08lx\n", r);
	ok( iosb.Status == STATUS_SUCCESS, "status wrong %08lx\n", iosb.Status);
	ok( iosb.Information == FILE_CREATED, "information wrong %08lx\n", iosb.Information);

	r = NtClose( file );
	ok( r == STATUS_SUCCESS, "status wrong %08lx\n", r);

	// query first file... should be "."
	r = NtQueryDirectoryFile( dir, 0, 0, 0, &iosb, buffer, sizeof buffer, FileBothDirectoryInformation, TRUE, 0, 0);
	ok( r == STATUS_SUCCESS, "failed to query directory %08lx\n", r);
	check_dot(&iosb, buffer);

	// query second file... should be ".."
	r = NtQueryDirectoryFile( dir, 0, 0, 0, &iosb, buffer, sizeof buffer, FileBothDirectoryInformation, TRUE, 0, 0);
	ok( r == STATUS_SUCCESS, "failed to query directory %08lx\n", r);
	check_dotdot(&iosb, buffer);

	// query third file... should be "edb.chk"
	r = NtQueryDirectoryFile( dir, 0, 0, 0, &iosb, buffer, sizeof buffer, FileBothDirectoryInformation, TRUE, 0, 0);
	ok( r == STATUS_SUCCESS, "failed to query directory %08lx\n", r);
	check_edb(&iosb, buffer);

	// no more files...
	r = NtQueryDirectoryFile( dir, 0, 0, 0, &iosb, buffer, sizeof buffer, FileBothDirectoryInformation, TRUE, 0, 0);
	ok( r == STATUS_NO_MORE_FILES, "failed to query directory %08lx\n", r);

	// try with a mask
	r = NtQueryDirectoryFile( dir, 0, 0, 0, &iosb, buffer, sizeof buffer, FileBothDirectoryInformation, TRUE, &mask, TRUE);
	ok( r == STATUS_SUCCESS, "failed to query directory %08lx\n", r);
	ok( iosb.Status == STATUS_SUCCESS, "status wrong %08lx\n", iosb.Status);
	check_dot(&iosb, buffer);

	r = NtClose( dir );
	ok( r == STATUS_SUCCESS, "failed to close handle %08lx\n", r);

	// set oa to point the the directory again
	init_us(&path, dirname);

	// re-open the file and scan with a mask
	// looks like the mask is set on the first scan after opening the directory
	r = query_one(&oa, edb, buffer, sizeof buffer, &iosb);
	ok( r == STATUS_SUCCESS, "query failed %08lx\n", r);
	check_edb(&iosb, buffer);

	// what happens if the mask is present but empty?
	r = query_one(&oa, L"", buffer, sizeof buffer, &iosb);
	ok( r == STATUS_SUCCESS, "query failed %08lx\n", r);
	check_dot(&iosb, buffer);

	// how does * work?
	r = query_one(&oa, L"*", buffer, sizeof buffer, &iosb);
	ok( r == STATUS_SUCCESS, "query failed %08lx\n", r);
	check_dot(&iosb, buffer);

	// how does * work?
	r = query_one(&oa, L"*.*", buffer, sizeof buffer, &iosb);
	ok( r == STATUS_SUCCESS, "query failed %08lx\n", r);
	check_dot(&iosb, buffer);

	// what does *e return?
	r = query_one(&oa, L"e*", buffer, sizeof buffer, &iosb);
	ok( r == STATUS_SUCCESS, "query failed %08lx\n", r);
	check_edb(&iosb, buffer);

	// can we get back ..
	r = query_one(&oa, L"..", buffer, sizeof buffer, &iosb);
	ok( r == STATUS_NO_SUCH_FILE, "query failed %08lx\n", r);

	// what about ... ?
	r = query_one(&oa, L"...", buffer, sizeof buffer, &iosb);
	ok( r == STATUS_NO_SUCH_FILE, "query failed %08lx\n", r);

	// does ? work
	r = query_one(&oa, L"??", buffer, sizeof buffer, &iosb);
	ok( r == STATUS_NO_SUCH_FILE, "query failed %08lx\n", r);

	// does ? work
	r = query_one(&oa, L"?.", buffer, sizeof buffer, &iosb);
	ok( r == STATUS_NO_SUCH_FILE, "query failed %08lx\n", r);

	// exact match
	r = query_one(&oa, L"edb.chk", buffer, sizeof buffer, &iosb);
	ok( r == STATUS_SUCCESS, "query failed %08lx\n", r);
	check_edb(&iosb, buffer);

	// almost exact match
	r = query_one(&oa, L"edb.ch", buffer, sizeof buffer, &iosb);
	ok( r == STATUS_NO_SUCH_FILE, "query failed %08lx\n", r);

	// case insensitive match
	r = query_one(&oa, L"EDB.CHK", buffer, sizeof buffer, &iosb);
	ok( r == STATUS_SUCCESS, "query failed %08lx\n", r);
	check_edb(&iosb, buffer);

	// dot star?
	r = query_one(&oa, L"edb.*", buffer, sizeof buffer, &iosb);
	ok( r == STATUS_SUCCESS, "query failed %08lx\n", r);
	check_edb(&iosb, buffer);

	// bad masks
	r = query_one(&oa, L"|", buffer, sizeof buffer, &iosb);
	ok( r == STATUS_NO_SUCH_FILE, "query failed %08lx\n", r);
	r = query_one(&oa, L":", buffer, sizeof buffer, &iosb);
	ok( r == STATUS_NO_SUCH_FILE, "query failed %08lx\n", r);
	r = query_one(&oa, L"/", buffer, sizeof buffer, &iosb);
	ok( r == STATUS_NO_SUCH_FILE, "query failed %08lx\n", r);
	r = query_one(&oa, L"\\", buffer, sizeof buffer, &iosb);
	ok( r == STATUS_NO_SUCH_FILE, "query failed %08lx\n", r);

	// delete the file
	init_us(&path, filename);
	r = NtDeleteFile( &oa );
	ok( r == STATUS_SUCCESS, "failed to delete directory %08lx\n", r);

	// delete the directory
	init_us(&path, dirname);
	r = NtDeleteFile( &oa );
	ok( r == STATUS_SUCCESS, "failed to delete directory %08lx\n", r);
}
Пример #5
0
int main(int argc, char **argv)
{
	HANDLE handle = 0, event = 0;
	NTSTATUS r;
	UNICODE_STRING path, mask, *pmask;
	OBJECT_ATTRIBUTES oa;
	WCHAR dirname[0x100];
	union {
		PCWSTR cp;
		PWSTR p;
	} u;
	WCHAR pathbuf[0x100];
	BYTE unknown[0x100];
	ULONG len;
	IO_STATUS_BLOCK iosb;

	if (argc != 2)
	{
		fprintf(stderr, "%s <dir>\\<mask>\n", argv[0]);
		return 1;
	}

	len = MultiByteToWideChar( CP_ACP, 0, argv[1], -1, dirname, sizeof dirname);

	path.Buffer = pathbuf;
	path.Length = 0;
	path.MaximumLength = sizeof pathbuf;

	if (!RtlDosPathNameToNtPathName_U( dirname, &path, &u.cp, &unknown ))
	{
		fprintf(stderr, "path conversion failed\n");
		fprintf(stderr, "path %S\n", dirname);
		return 1;
	}

	if (u.p != &pathbuf[0])
	{
		len = lstrlenW(u.p) + 1;
		path.Length -= len*2;
		path.Buffer[path.Length/2] = 0;
	}

	path.Buffer[path.Length/2] = 0;
	//fprintf(stderr, "path = ");
	//dump_string(path.Buffer, path.Length/2);
	//fprintf(stderr, "\n");

	oa.Length = sizeof oa;
	oa.RootDirectory = 0;
	oa.ObjectName = &path;
	oa.Attributes = OBJ_CASE_INSENSITIVE;
	oa.SecurityDescriptor = 0;
	oa.SecurityQualityOfService = 0;

	r = NtOpenFile(&handle, GENERIC_READ, &oa, &iosb, FILE_SHARE_READ, 0 /*FILE_SYNCHRONOUS_IO_NONALERT*/);
	if (r != STATUS_SUCCESS)
	{
		fprintf(stderr, "openfile failed\n");
		fprintf(stderr, "path %S\n", pathbuf);
		return 1;
	}

	len = lstrlenW(u.p);
	if (len)
	{
		mask.Buffer = u.p;
		mask.Length = len*2;
		mask.MaximumLength = 0;
		pmask = &mask;

		//fprintf(stderr, "mask = ");
		//dump_string(u.p, len);
		//fprintf(stderr, "\n");
	}
	else
		pmask = 0;

	event = CreateEvent(0,0,0,0);
	if (!event)
	{
		fprintf(stderr, "createevent failed\n");
		return 1;
	}

	do {
		r = query_one(handle, event, pmask);
	} while (r == STATUS_SUCCESS);

	NtClose(handle);
	return 0;
}
Пример #6
0
/****************************************************************************
  main program
****************************************************************************/
int main(int argc,char *argv[])
{
  int opt;
  unsigned int lookup_type = 0x0;
  pstring lookup;
  extern int optind;
  extern char *optarg;
  BOOL find_master=False;
  int i;
  static pstring servicesf = CONFIGFILE;
  BOOL lookup_by_ip = False;

  DEBUGLEVEL = 1;
  /* Prevent smb.conf setting from overridding */
  AllowDebugChange = False;

  *lookup = 0;

  TimeInit();

  setup_logging(argv[0],True);

  charset_initialise();

  while ((opt = getopt(argc, argv, "d:fB:U:i:s:SMrhART")) != EOF)
    switch (opt)
      {
      case 'B':
	bcast_addr = *interpret_addr2(optarg);
	got_bcast = True;
	use_bcast = True;
	break;
      case 'f':
	give_flags = True;
	break;
      case 'U':
	bcast_addr = *interpret_addr2(optarg);
	got_bcast = True;
	use_bcast = False;
	break;
      case 'T':
        translate_addresses = !translate_addresses;
	break;
      case 'i':
	      {
		      extern pstring global_scope;
		      pstrcpy(global_scope,optarg);
		      strupper(global_scope);
	      }
	      break;
      case 'M':
	find_master = True;
	break;
      case 'S':
	find_status = True;
	break;
      case 'R':
	recursion_desired = True;
	break;
      case 'd':
	DEBUGLEVEL = atoi(optarg);
	break;
      case 's':
	pstrcpy(servicesf, optarg);
	break;
      case 'r':
        RootPort = True;
        break;
      case 'h':
	usage();
	exit(0);
	break;
      case 'A':
        lookup_by_ip = True;
        break;
      default:
	usage();
	exit(1);
      }

  if (argc < 2) {
    usage();
    exit(1);
  }

  if (!lp_load(servicesf,True,False,False)) {
    fprintf(stderr, "Can't load %s - run testparm to debug it\n", servicesf);
  }

  load_interfaces();
  if (!open_sockets()) return(1);

  for (i=optind;i<argc;i++)
  {
      char *p;
      struct in_addr ip;

      fstrcpy(lookup,argv[i]);

      if(lookup_by_ip)
      {
        fstrcpy(lookup,"*");
        ip = *interpret_addr2(argv[i]);
	do_node_status(ServerFD, lookup, lookup_type, ip);
        continue;
      }

      if (find_master) {
	if (*lookup == '-') {
	  fstrcpy(lookup,"\01\02__MSBROWSE__\02");
	  lookup_type = 1;
	} else {
	  lookup_type = 0x1d;
	}
      }

      p = strchr(lookup,'#');
      if (p) {
        *p = '\0';
        sscanf(++p,"%x",&lookup_type);
      }

      if (!query_one(lookup, lookup_type)) {
	printf( "name_query failed to find name %s", lookup );
        if( 0 != lookup_type )
          printf( "#%02x", lookup_type );
        printf( "\n" );
      }
  }
  
  return(0);
}