Ejemplo n.º 1
0
WERROR _dfs_enum(pipes_struct *p, DFS_Q_DFS_ENUM *q_u, DFS_R_DFS_ENUM *r_u)
{
  uint32 level = q_u->level;
  struct junction_map jn[MAX_MSDFS_JUNCTIONS];
  int num_jn = 0;

  num_jn = enum_msdfs_links(jn);
  
  DEBUG(5,("make_reply_dfs_enum: %d junctions found in Dfs, doing level %d\n", num_jn, level));

  r_u->ptr_buffer = level;
  r_u->level = r_u->level2 = level;
  r_u->ptr_num_entries = r_u->ptr_num_entries2 = 1;
  r_u->num_entries = r_u->num_entries2 = num_jn;
  r_u->reshnd.ptr_hnd = 1;
  r_u->reshnd.handle = num_jn;
  
  r_u->ctr = (DFS_INFO_CTR*)talloc(p->mem_ctx, sizeof(DFS_INFO_CTR));
  if (!r_u->ctr)
    return WERR_NOMEM;
  ZERO_STRUCTP(r_u->ctr);
  r_u->ctr->switch_value = level;
  r_u->ctr->num_entries = num_jn;
  r_u->ctr->ptr_dfs_ctr = 1;
  
  r_u->status = init_reply_dfs_ctr(p->mem_ctx, level, r_u->ctr, jn, num_jn);

  return r_u->status;
}
Ejemplo n.º 2
0
WERROR _dfs_Enum(pipes_struct *p, NETDFS_Q_DFS_ENUM *q_u, NETDFS_R_DFS_ENUM *r_u)
{
	uint32 level = q_u->level;
	struct junction_map jn[MAX_MSDFS_JUNCTIONS];
	int num_jn = 0;
	int i;

	num_jn = enum_msdfs_links(p->mem_ctx, jn, ARRAY_SIZE(jn));
	vfs_ChDir(p->conn,p->conn->connectpath);
    
	DEBUG(5,("_dfs_Enum: %d junctions found in Dfs, doing level %d\n", num_jn, level));

	r_u->ptr0_info = q_u->ptr0_info;
	r_u->ptr0_total = q_u->ptr0_total;
	r_u->total = num_jn;

	r_u->info = q_u->info;

	/* Create the return array */
	switch (level) {
	case 1:
		r_u->info.e.u.info1.count = num_jn;
		if (num_jn) {
			if ((r_u->info.e.u.info1.s = TALLOC_ARRAY(p->mem_ctx, NETDFS_DFS_INFO1, num_jn)) == NULL) {
				return WERR_NOMEM;
			}
			r_u->info.e.u.info1.ptr0_s = 1;
			r_u->info.e.u.info1.size_s = num_jn;
		}
		break;
	case 2:
		r_u->info.e.u.info2.count = num_jn;
		if (num_jn) {
			if ((r_u->info.e.u.info2.s = TALLOC_ARRAY(p->mem_ctx, NETDFS_DFS_INFO2, num_jn)) == NULL) {
				return WERR_NOMEM;
			}
			r_u->info.e.u.info2.ptr0_s = 1;
			r_u->info.e.u.info2.size_s = num_jn;
		}
		break;
	case 3:
		r_u->info.e.u.info3.count = num_jn;
		if (num_jn) {
			if ((r_u->info.e.u.info3.s = TALLOC_ARRAY(p->mem_ctx, NETDFS_DFS_INFO3, num_jn)) == NULL) {
				return WERR_NOMEM;
			}
			r_u->info.e.u.info3.ptr0_s = 1;
			r_u->info.e.u.info3.size_s = num_jn;
		}
		break;
	default:
		return WERR_INVALID_PARAM;
	}

	for (i = 0; i < num_jn; i++) {
		switch (level) {
		case 1: 
			init_reply_dfs_info_1(&jn[i], &r_u->info.e.u.info1.s[i]);
			break;
		case 2:
			init_reply_dfs_info_2(&jn[i], &r_u->info.e.u.info2.s[i]);
			break;
		case 3:
			init_reply_dfs_info_3(p->mem_ctx, &jn[i], &r_u->info.e.u.info3.s[i]);
			break;
		default:
			return WERR_INVALID_PARAM;
		}
	}
  
	r_u->status = WERR_OK;

	return r_u->status;
}